[gelöst] Peering eines Derivats von HB-UNI-SenAct-4-4-RC

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

Moderator: Co-Administratoren

Antworten
Benutzeravatar
FUEL4EP
Beiträge: 588
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 80 Mal
Kontaktdaten:

[gelöst] Peering eines Derivats von HB-UNI-SenAct-4-4-RC

Beitrag von FUEL4EP » 04.08.2023, 13:25

Bei dem Test eines Derivats von Jérômes Sketch HB-UNI-SenAct-4-4-RC funktioniert das Peering der Gerätetasten nicht und ich bitte um Eure Hilfe.

Es handelt sich bei der Neuentwicklung um einen 3x Schalter für Betrieb an einem Netzfreischalter. Der vierte Kanal wird für die hybride Akkuladefunktion und die Netzspeisung verwendet.
front.png
back.png
Der Sketch
HB-UNI-SenAct-4-4-RC_DS.ino.txt
(26.61 KiB) 24-mal heruntergeladen
(bitte .txt entfernen) des Derivats passt zu der Platine HB-UNI-SenAct-4-4-SC_DS_FUEL4EP. Bei der schon publizierten SC-Version des Sketches HB-UNI-SenAct-4-4-SC_DS funktioniert das Peering der Gerätetasten und ein Drücken der Gerätetasten löst die entsprechende Relaisschaltfunktion aus. Hinweis: Die aktuelle Giithub Version is buggy. Das ist in meiner lokalen Version schon korrigiert.

Der in der Testphase befindliche Sketch HB-UNI-SenAct-4-4-RC_DS funktioniert bis auf das Peering der vier Gerätetasten: Ein Drücken auf eine Gerätetaste wird erkannt, löst aber keinen Schaltvorgang aus. Hier die Ausgabe des seriellen Monitors nach einem Werksreset:

Code: Alles auswählen

13:12:53.374 ->  debounce
13:12:53.473 ->  pressed
13:12:56.592 ->  longpressed
13:13:00.509 ->  longpressed
13:13:00.509 -> RESET
13:13:00.542 -> AskSin++ v5.0.2 (Aug  4 2023 12:56:51)
13:13:00.542 -> Address Space: 32 - 561
13:13:00.542 -> 00000000
13:13:00.542 -> Init Storage: CAFEEC08
13:13:02.635 -> Radio init1
13:13:02.635 -> CC Version: 14
13:13:02.635 ->  - ready
13:13:02.635 -> Init HAL ..
13:13:03.465 -> .. creating peerings now
13:13:03.465 -> .. devid = 00F61001
13:13:04.062 -> Battery set low:  46
13:13:04.062 -> Battery set crit: 44
13:13:04.128 -> accumulator voltage(MCU ADC) (x1000.0) [mV] : 4971
13:13:04.162 -> Activate Cycle Msg
13:13:04.195 -> <- 0E 01 86 10 F61001 000000 06 01 00 00 00  - 3674
13:13:04.294 -> <- 0E 02 86 10 F61001 000000 06 02 00 00 00  - 3772
13:13:04.361 -> Switching pin delayed back to inactive state: 3
13:13:04.394 -> <- 0E 03 86 10 F61001 000000 06 03 00 00 00  - 3872
13:13:04.493 -> <- 0E 04 86 10 F61001 000000 06 04 00 00 00  - 3973
13:13:08.740 -> 07 debounce
13:13:08.773 -> BATTERY IS LOW? 0
13:13:08.806 -> 07 pressed
13:13:08.806 -> BATTERY IS LOW? 0
13:13:09.138 -> 07 released
13:13:09.138 -> BATTERY IS LOW? 0
13:13:09.138 -> -> 0B 07 02 40 F61001 F61001 07 00  - 8595
13:13:09.271 -> <- 0B 07 86 40 F61001 000000 07 00  - 8718
13:13:09.271 -> 07
13:13:09.271 -> BATTERY IS LOW? 0
13:13:11.661 -> 06 debounce
13:13:11.661 -> BATTERY IS LOW? 0
13:13:11.695 -> 06 pressed
13:13:11.728 -> BATTERY IS LOW? 0
13:13:11.993 -> 06 released
13:13:12.026 -> BATTERY IS LOW? 0
13:13:12.026 -> -> 0B 0B 02 40 F61001 F61001 06 00  - 11472
13:13:12.126 -> <- 0B 0B 86 40 F61001 000000 06 00  - 11589
13:13:12.126 -> 06
13:13:12.126 -> BATTERY IS LOW? 0
13:13:13.819 -> ignore 0C 72 86 70 20DD41 000000 00 D8 35  - 13297

Das Peering wird im Sketch sieht so versucht:

Code: Alles auswählen

void initPeerings (bool first) {
  // create internal peerings - CCU2 needs this
  if ( first == true ) {
#ifdef CREATE_INTERNAL_PEERINGS
    DPRINTLN(F(".. creating peerings now"));
    HMID devid;
    sdev.getDeviceID(devid);
    DPRINT(F(".. devid = ")); DHEXLN(devid);
    for ( uint8_t i = 1; i <= 4; ++i ) {
      Peer ipeer(devid, i);
      sdev.derived_switchChannel(i).peer(ipeer);
    }
    for ( uint8_t i = 1; i <= 4; ++i ) {
      Peer ipeer(devid, i);
      sdev.remoteChannel(i + 4).peer(ipeer);
    }
#endif
  }
}
Da mein längeres Suchen nach dem Fehler bisher nicht fruchtete, bitte ich Euch um Hilfe.

Schon mal schönen Dank im Voraus.

EDIT: Gerade sah ich, dass ich beim Addon einen Copy-Paste Fehler gemacht habe. Ich melde mich wieder, wenn ich das gefixt und erneut getestet habe: Der Copy-Paste Fehler ist nun lokal gefixt. Das war leider nicht die Ursache :-(

Hier das WebUI des HB-UNI-SenAct-4-4-RC_DS Geräts meiner RaspberryMatic. Über das WebUI lassen sich die Relais schalten. Tastendrücke werden mit einem Zeitstempel registiert. Nur die Relais schalten nicht bei Tastendrücken :-(

EDIT2: Noch ein Hinweis: Der Sketch verwendet zwei abgeleitete Klassen 'derived_SwitchChannel' und 'derived_AvrSPI'. Vielleicht funktioniert das in den Tiefen of AsksinPP durchgeführte Peering damit nicht. Da muss ich mal genauer reinschauen.

EDIT3: Nach der Korrektur eines Copy-Paste Fehlers zeigt das Drücken einer Taste erste Reaaktionen. Es ist zwar noch nicht die gewünschte Reaktion, aber das lässt sich finden und lösen.

Falsch war in der Peering-Funktion:

Code: Alles auswählen

      for ( uint8_t i = 1; i <= 4; ++i ) {
      Peer ipeer(devid, i);
      sdev.derived_switchChannel(i).peer(ipeer);
 
Reaktion zeigt sich mit:

Code: Alles auswählen

      for ( uint8_t i = 1; i <= 4; ++i ) {
      Peer ipeer(devid, i + 4);
      sdev.derived_switchChannel(i).peer(ipeer);
 
EDIT4: Gelöst :-) Nochmals Gerät abgelernt, neu geflasht, Werksreset, abgebrochene LED Leitung neu angelötet: Alles geht nun wie erwartet :D

Nach einer noch eingehenderen Validierungsphase werde ich den Sketch auf Github freigeben.

EDIT5: Die mittlere Stromaufnahme im Sleep-Mode beträgt ca. 680 uA.

EDIT6: Der funktionierende Sketch ist nun auf Github zu finden: HB-UNI-SenAct-4-4-RC_DS
Dateianhänge
WebUI.png
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

Antworten

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