HM-Sec-SCo - alternative Firmware mit AskSinPP

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

Moderator: Co-Administratoren

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von jp112sdl » 16.06.2022, 10:32

"Kleiner" Rückschlag beim Rollout...
Meine Gehversuche fanden mit einem HmIP-SWDO statt.
Das hat ein TRX-TIF (CC1101) verbaut.
Ohne dem weiter Beachtung zu schenken, hat stan23 die Firmware bei seinem HM-Sec-SCo getestet.
Der Sketch blieb beim Initialisieren des Funkmoduls jedes Mal hängen.
Nach genauerem hinsehen ist ihm aufgefallen, dass im HM-Sec-SCo ein TRX-SL (Si4431) Funkmodul steckt.

Next Milestone: Si4431 Integration in die AskSin++ Lib

VG,
Jérôme ☕️

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

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 577 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von stan23 » 27.06.2022, 23:45

Kurzer Zwischenstand:

Pakete senden geht schon mal.
CRC, Whitening und das restliche Paket Handling muss leider in Software erledigt werden, weil sich CC1101 und Si4431 da geringfügig unterscheiden.
HM-Sec_SCo_EFM32_Analyzer.png
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

nico84
Beiträge: 13
Registriert: 17.03.2018, 19:47
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 6 Mal

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von nico84 » 28.06.2022, 20:40

stan23 hat geschrieben:
27.06.2022, 23:45
Kurzer Zwischenstand:

Pakete senden geht schon mal.
CRC, Whitening und das restliche Paket Handling muss leider in Software erledigt werden, weil sich CC1101 und Si4431 da geringfügig unterscheiden.

HM-Sec_SCo_EFM32_Analyzer.png

Crc und Whitening habe ich bei mir lokal schon für das SX1276 und RFM69 auf Basis von https://forum.fhem.de/index.php?topic=4 ... #msg409698 geschrieben. Bei Bedarf kann ich dir das hochladen.

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 577 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von stan23 » 28.06.2022, 21:20

Danke, habe ich auf Basis der App Notes von TI schon selber implementiert. Sonst hätte der Analyzer die Pakete nicht angezeigt 8)

Beim Whitening benutze ich momentan vorberechnete Werte für PN9. Da muss ich mal überlegen ob ich das lieber dynamisch berechne.
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

nico84
Beiträge: 13
Registriert: 17.03.2018, 19:47
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 6 Mal

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von nico84 » 28.06.2022, 21:39

Könnten wir evtl. Whitening und Crc in eine Klasse auslagen? Dann kann es auch bei weiteren Funkmodulen verwendet werden.

Bei mir sieht das so aus:

Code: Alles auswählen

 class RadioTools
  {
  public:
    
    // source: Thx to Uli from https://forum.fhem.de/index.php?topic=49300.msg409698#msg409698
    static void xOr_PN9(uint8_t *p_buf, uint8_t p_len)
    {
      uint8_t bit_five = 0;
      uint8_t bit_zero = 0;
      uint8_t carry_new = 0;

      uint8_t key = 0xFF; // initialize value
      uint8_t carry = 1;  // initialize value

      for (uint8_t i = 0; i < p_len; i++)
      {
        p_buf[i] ^= key; // xor

        // PN9 Key generation to get next Key for xOr
        for (uint8_t j = 0; j < 8; j++)
        {
          bit_five = (key & (1 << 5)) >> 5;
          bit_zero = (key & (1 << 0)) >> 0;
          carry_new = bit_five ^ bit_zero;
          key >>= 1;
          key |= (carry << 7);
          carry = carry_new;
        }
      }
    }

    // source: Thx to Uli from https://forum.fhem.de/index.php?topic=49300.msg409698#msg409698
    static uint16_t calcCRC16hm(uint8_t *p_data, uint8_t p_length)
    {
      uint16_t checksum = 0xffff;
      for (int i = 0; i < p_length; i++)
      {
        uint8_t bte = p_data[i];
        for (int j = 0; j < 8; j++)
        {
          if (((checksum & 0x8000) >> 8) ^ (bte & 0x80))
          {
            checksum = (checksum << 1) ^ 0x8005;
          }
          else
          {
            checksum = (checksum << 1);
          }
          bte <<= 1;
        }
      }
      return checksum;
    }

    // Konvertiert die ankommenden Daten in Rawdaten für das RF Modul. Inc. Whitening und Crc.
    // p_data = Daten
    // p_rawData = Wird mit den raw Daten gefüllt. Muss mindestens 3 Byte länger sein
    // p_size = Länge der Daten ohne crc
    // return = Länge + 3 ( Längenbyte + 2 crc Byte)
    static uint8_t convertToRawData(const uint8_t *p_data, uint8_t *p_rawData, const uint8_t p_size)
    {
      uint8_t size = p_size + 3;
      p_rawData[0] = p_size;
      for (uint8_t i = 0; i < p_size; i++)
      {
        if (i + 1 < RFM69_HM_PAYLOAD_LENGTH)
        {
          p_rawData[i + 1] = p_data[i];
        }
        else
        {
          DPRINTLN(F("Packet too long"));
        }
      }
      uint16_t crc = calcCRC16hm(p_rawData, p_size + 1); // size +1 crc über payload + längenbyte
      DPRINTLN("CCR");
      DHEX(crc);
      DPRINTLN("");
      p_rawData[p_size + 1] = (crc >> 8) & 0xff;
      p_rawData[p_size + 2] = crc & 0xff;
      xOr_PN9(p_rawData, size);
      return size;
    }
  };

Benutzeravatar
stan23
Beiträge: 2030
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 577 Mal
Danksagung erhalten: 335 Mal
Kontaktdaten:

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von stan23 » 29.06.2022, 13:37

Danke, dann können die PN9-Werte dynamisch berechnet werden. Spart evtl. ein paar Byte gegenüber vorgegebenen 29 Bytes (maximale Telegrammlänge).

Zu den Klassen:
mir ist noch nicht klar wie man CC1101 und Si4431 parallel in die AskSinPP bringt. Die Radio.h braucht eine größere Überarbeitung, weil auch die SPI-Funktionen für CC und Si unterschiedlich sind.
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

nico84
Beiträge: 13
Registriert: 17.03.2018, 19:47
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 6 Mal

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von nico84 » 29.06.2022, 14:20

Ich kann dir nachher meine RFM69 Implementierung zeigen. Die funktioniert, braucht aber noch etwas Refactoring.

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von jp112sdl » 29.06.2022, 14:33

stan23 hat geschrieben:
29.06.2022, 13:37
mir ist noch nicht klar wie man CC1101 und Si4431 parallel in die AskSinPP bringt. Die Radio.h braucht eine größere Überarbeitung, weil auch die SPI-Funktionen für CC und Si unterschiedlich sind.
Na dann müssen die SPI Methoden mit in die Funkmodulklassen.
nico84 hat geschrieben:
29.06.2022, 14:20
Ich kann dir nachher meine RFM69 Implementierung zeigen. Die funktioniert, braucht aber noch etwas Refactoring.
Das wäre ja auch noch eine Bereicherung.
Es gab dazu schon mal ein Issue https://github.com/pa-pa/AskSinPP/issues/102
Vielleicht hast du ja Lust, einen PR zu machen, damit andere auch davon profitieren, um das RFM69 in Projekten verwenden zu können?

VG,
Jérôme ☕️

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

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von jp112sdl » 29.06.2022, 20:08

Die EFM32-Board-Unterstützung für die Arduino IDE kann nun über die Boardverwaltung installiert werden.

Als zusätzliche Boardanbieter-URL [?] muss

Code: Alles auswählen

https://raw.githubusercontent.com/jp112sdl/ARDUINO_EFM32/master/package/package_ARDUINO_EFM32_index.json
hinzugefügt werden.

Anschließend lässt es sich über die Suche finden und installieren:
Bild

Die GNU Compiler Tools sowie OpenOCD werden automatisch mit installiert.
Für den ST-Link Upload sollte somit hoffentlich alles dabei sein.

VG,
Jérôme ☕️

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

nico84
Beiträge: 13
Registriert: 17.03.2018, 19:47
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 6 Mal

Re: HM-Sec-SCo - alternative Firmware mit AskSinPP [WIP]

Beitrag von nico84 » 29.06.2022, 20:27

jp112sdl hat geschrieben:
29.06.2022, 14:33

Na dann müssen die SPI Methoden mit in die Funkmodulklassen.
Genau einfach da mit ein. Hab ich auch so gemacht.
jp112sdl hat geschrieben:
29.06.2022, 14:33

Das wäre ja auch noch eine Bereicherung.
Es gab dazu schon mal ein Issue https://github.com/pa-pa/AskSinPP/issues/102
Vielleicht hast du ja Lust, einen PR zu machen, damit andere auch davon profitieren, um das RFM69 in Projekten verwenden zu können?
Ja das hatte noch vor. Es funktioniert zwar, hat aber noch ein paar kleine Probleme.

Antworten

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