AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

papa

Gibt den gesendeten Wert doch einfach mal vor dem Versenden auf der Serial-Console aus. Dann siehst Du, ob er falsch rechnet oder die Message falsch ist.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Dietmar63

Das habe ich schon gemacht, aber in Fhem kommen die bytes sogar an, aber sie werden verschoben interpretiert
Wie schon gesagt, ich komme erst am Sonntag dazu mich damit zu beschäftigen

Dietmar
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

papa

Arg - kann es ein, dass Du Stromwerte mmit der Gas-Message senden willst ? Das kann nicht funktionieren. Die Message für Strom sieht anders aus. Wenn ich nachher noch dazu komme, ergämze ich die entsprechende Message im Example.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Dietmar63

Den Unterschied habe ich noch nicht herausgefunden.
Habe die Gas  Nachricht kopiert und den Code auf 53 oder 5E geändert.
Die Struktur habe ich so gelassen.

Schon 5mal mit einer funktionierenden Variante verglichen, aber das Problem noch nicht gelöst
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

p2122

Hallo, sollte der HM-RC-4 schon funktionieren? Ich bekomme es irgendwie nicht hin  :(   Im Serial Monitor kommt:

AskSin++ V0.1.0
CC init12.................3 - ready
*

...und dann nichts mehr. Der HM-LC-SWX-SM funktioniert gut.

Peter

papa

Zitat von: Dietmar63 am 22 Oktober 2016, 21:58:38
Den Unterschied habe ich noch nicht herausgefunden.
Habe die Gas  Nachricht kopiert und den Code auf 53 oder 5E geändert.
Die Struktur habe ich so gelassen.

Schon 5mal mit einer funktionierenden Variante verglichen, aber das Problem noch nicht gelöst

Mach mal nen Update. Habe die PowerMessage eingecheckt. Probiere die mal.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Zitat von: p2122 am 22 Oktober 2016, 23:26:00
Hallo, sollte der HM-RC-4 schon funktionieren? Ich bekomme es irgendwie nicht hin  :(   Im Serial Monitor kommt:

AskSin++ V0.1.0
CC init12.................3 - ready
*

...und dann nichts mehr. Der HM-LC-SWX-SM funktioniert gut.

Sollte eigentlich funktionieren. Allerdings ist die Beschaltung der Taster so wie hier beschrieben nötig.

http://www.breadboarding.de/arduinoavr-buttons-an-einem-interrupt/

Nur der Interrupt an Pin 3 löst eine Aktion aus.

Mitterweile habe ich aber herausgefunden, dass der AVR auch durch den PinChange-Interrupt aus den Tiefschlaf geweckt wird. Damit ist die aufwendige Beschaltung nicht mehr nötig. Bin nur noch nicht dazu gekommen, den Code entsprechend anzupassen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

MBHG

#37
Hallo Holger,

Mein Sw4 läuft immer noch einwandfrei und es werden immer mehr davon. Frage: kann ich einen externen Schalter an einen Interrupt hängen, der dann einen der vier anschaltet? Dann kömnte ich das als Eingang nutzen und an die Zentrale zurückmelden.

Sprich ich brauche drei Schakter und eine Rückmeldung. Theoretisch ggfs. sogar über das Batteriesignal, ist aber kein Muss.

Kanmst du mir einen Tipp geben?

Gruss Marc
-----------------------------------------------------------
https://smarthome.family.blog Debian Linux, NanoCUL 868, Signalduino, 4x HM-SW4, 11x HM Asksin Unisensor, NodeMCU ESP8266, RCS 1000 N Comfort, Magic Home, Rauchmelder PT2262, Babble

papa

Hallo Marc,

ich bin mir zwar nicht sicher, ob ich Dich richtig verstanden habe, aber der Config-Button im Example schaltet doch Channel 1. Du kannst natürlich noch weitere Buttons entsprechend anlegen (an andere Pins) und andere Channels schalten.

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

Dietmar63

so, ich habe die Differnz mit den power Signal gefunden.
die Powermessage Strom darf Counter nur 24bit liefern. Ich hatte die GasMessage kopiert nur einfach so gelassen. Das hat dann zu der Verschiebung geführt.

den timeout hochsetzen auf 500ms hat auch etwas gebracht, aber ganz rund(gefühlsmäßig) läuft es noch nicht.

Jetzt habe ich ein kleines neues Problem:
Ich lasse die Powernachricht alle 60 Sekunden vom A. liefern.
Das klappt auch im Abstand von 66 Sekunden. Die Differenz ist auf den ungenauen wdt zurückzuführen.

Wenn ich aber per Taschenlampe Interrupts an der Fotodiode erzeuge, kommt die Zeit im A. aus dem Tritt.
Das liegt meiner Meinung nach daran, das der A. durch den Interrupt aufwacht,  den tick im aClock um 80 Zentelsekunden aktualisiert, obwohl der wdt-timer nicht komplett abgelaufen ist.

Ich hatte dieses Problem schon einmal mit dem A. und habe mir damals geholfen indem ich einen Unterschied gemacht habe,zwischen dem Aufwachen durch einen PinchangeInterrupt und den Ablauf des wdt-timers.

Bei ein Pinchangeinterrupt habe ich den wdt einfach weiterlaufen lassen, ohne Neuladen des wdt. Ich weiß nicht, ob das mit dem LowPower Framework einfach möglich ist.


2016.10.23 22:52:14 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:51:08 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:50:03 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:48:57 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:47:51 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:46:45 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:45:39 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:44:33 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:43:27 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:42:21 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:41:15 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:40:10 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:39:04 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:37:58 3: Nachricht von HM_441234_IEC_02: power: 120
2016.10.23 22:37:01 3: Nachricht von HM_441234_IEC_02: power: 720
2016.10.23 22:36:58 3: Nachricht von HM_441234_IEC_02: power: 720
2016.10.23 22:36:53 3: Nachricht von HM_441234_IEC_02: power: 1080
2016.10.23 22:36:42 3: Nachricht von HM_441234_IEC_02: power: 960
2016.10.23 22:36:39 3: Nachricht von HM_441234_IEC_02: power: 360
2016.10.23 22:36:15 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:35:13 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:34:04 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:32:58 3: Nachricht von HM_441234_IEC_02: power: 0
2016.10.23 22:31:52 3: Nachricht von HM_441234_IEC_02: power: 0


hier das Beispiel:


void loop(){
 
   unsigned long now = millis();
   
   if (wdt != wdtold) {
      Serial << "pircount: " << pir << "ms:"<<millis() << " wdtcount: " << wdt << " " << tim << " " << now%1000 << " WDTtime: " << WDTtime << "\n";;
      Serial.flush();
   }
   
   ADCSRA = 0;                                 // disable ADC
// #################
  if (wdt != wdtold) {
      wdtEnable (9, 1);
  }
 
  wdtold = wdt;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  cli();
  if (0)
  {
    sleep_enable();
    sleep_bod_disable();
    sei();
    sleep_cpu();
    sleep_disable();
  }
  sei();

// Serial << "... wieder wach\n";
// Serial.flush();

// #################   
}

void pirCount()   
   { pir++;  }

ISR(WDT_vect)
{
   wdt++;
   tim += WDTtime;
}


vielleicht geht folgendes:


  if (wdt != wdtold) {
      LowPower.powerDown(SLEEP_1S,ADC_OFF,BOD_OFF);
  } else {
     // sebst gemachtes sleep, wie oben
  }

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Ich werde mal eine für mich passende doSleep-Methode in Activity bauen und wenn ich sie zum Laufen bekomme ggf. zur Verfügung stellen.


Eingenschaften:

  • wdt-timer mit Korrekturfaktor
  • wdt-timer wird nicht durch PinchangeInterrupt unterbrochen
  • Korrektur wird nur nach Ablauf des wdt nach aClock geschrieben
  • eventuell Bereitstellung getMillis() in aClock


ein gestriger Langzeittest(zdwei Stunden) hat ergeben, dass die PowerMessages jetzt recht zuverlässig zwischen NanoCul und Arduino versendet werden. Auch der Inhalt passt.
Im SerialMonitor wird jetzt selbst jede PowerMessage mit waitAck: 01 protokolliert.

Und die ursprüngliche Idee, Gasnachrichten und Powernachrichten alle 10 bzw. alle 5 Minuten zu versenden funktioneirt auch.
FHEM erzeugt die Readings in den Channels anhand des Message-typ.

Nenbenbei eine Frage:
Gibt es einen Grund warum der typ zweimal versorgt wird?
Zeile 229 und Zeile 241 - manchmal mit verschiedenen Werten.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

MBHG

Hallo Holger,

danke. Das wird wohl mein Lieblingsmodul.

Zitatich bin mir zwar nicht sicher, ob ich Dich richtig verstanden habe, aber der Config-Button im Example schaltet doch Channel 1. Du kannst natürlich noch weitere Buttons entsprechend anlegen (an andere Pins) und andere Channels schalten.

Ich hätte mich genauer ausdrücken sollen. Stimmt, der Config Button schaltet eines der Relais. Allerdings ist es in dem Fall so, daß das externe Signal nicht nur ein kurzes an / aus ist, sondern dann für  mehrere Minuten an ist. Das würde dann ja den Config triggern.

Wie kann ich den Buttons anlagen? Macht es was aus, wenn diese für längere Zeit ein Signal liefern?

Danke & Gruss

Marc

-----------------------------------------------------------
https://smarthome.family.blog Debian Linux, NanoCUL 868, Signalduino, 4x HM-SW4, 11x HM Asksin Unisensor, NodeMCU ESP8266, RCS 1000 N Comfort, Magic Home, Rauchmelder PT2262, Babble

papa

Zitat von: Dietmar63 am 24 Oktober 2016, 09:03:33
Ich werde mal eine für mich passende doSleep-Methode in Activity bauen und wenn ich sie zum Laufen bekomme ggf. zur Verfügung stellen.

Für die Anpassung der PowerDown-Implementierung ist das Template-Argument Saver bei Activity::savePower() gedacht. Hier gibt es bisher die Implementierungen Idle und Sleep. Du kannst einfach eine neue Ableitung HighPrecisionSleep von Sleep machen, die dann doSleep() entsprechend implementiert. Da kann die Low-Power-Library auch komplett weg fallen.

Zitat von: Dietmar63 am 24 Oktober 2016, 09:03:33
Nenbenbei eine Frage:
Gibt es einen Grund warum der typ zweimal versorgt wird?
Zeile 229 und Zeile 241 - manchmal mit verschiedenen Werten.

In der Gerätebeschreibungs-XML vom HM-ES-TX-WM https://github.com/eq-3/occu/blob/master/firmware/rftypes/rf_es_tx_wm.xml sind diese zwei Messages definiert. Sie unterscheiden sich nur in der ID. Ich weiss auch nicht, welche wann zu verwenden ist. Beim Gas-Event ist es auch so. Dort versende ich GAS_POWER_EVENT_CYCLIC=0x53. Das scheint soweit gut zu funktionieren.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Zitat von: MBHG am 24 Oktober 2016, 09:24:14
Wie kann ich den Buttons anlagen? Macht es was aus, wenn diese für längere Zeit ein Signal liefern?


class Channel2Button : public Button {
public:
  Channel2Button () {
    setLongPressTime(seconds2ticks(60UL*60*60)); // 1hour
  }
  virtual void state (uint8_t s) {
    Button::state(s);
    if( s == Button::pressed ) {
      sdev.channel(2).toggleState();
    }
  }
};
Channel2Button c2Btn;
void c2BtnISR () { c2Btn.check(); }


Einfach einen Button ableiten, der nur auf das "Pressed" Event reagiert. Die LongPressTime schön hoch setzen, damit wir uns die vielen unnötigen Events im Hintergrund sparen können. Und dann im setup() mit dem Pin und dem entsprechenden PinChangeInterrupt verbinden:


  ....
  c2Btn.init(CHANNEL2_BUTTON_PIN);
  attachPinChangeInterrupt(CHANNEL2_BUTTON_PIN,c2BtnISR,CHANGE);
  ....


Sollte so funktionieren ..... habe es aber nur hier im Editor geschrieben - also ungetestet. Der Channel könnte natürlich noch als Member änderbar gemacht werden.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

MBHG

Hallo Holger,

lieben Dank, ich werde es demnächst mal ausprobieren und Rückmeldung geben.

Toll. Danke

Marc
-----------------------------------------------------------
https://smarthome.family.blog Debian Linux, NanoCUL 868, Signalduino, 4x HM-SW4, 11x HM Asksin Unisensor, NodeMCU ESP8266, RCS 1000 N Comfort, Magic Home, Rauchmelder PT2262, Babble