Entwicklung SIGNALDuino Empfänger Firm- und Hardware V4 für Maple Mini und ESP32

Begonnen von Ralf9, 13 Dezember 2019, 12:48:26

Vorheriges Thema - Nächstes Thema

Reinhard.M

Zitat von: Ralf9 am 04 September 2021, 15:27:40
Der Bootloader 2.0 ist abwärts kompatibel zum Orginalbootloader.

Beim dfu-util bestimmt -a die upload Methode.
-a 1 ist der orginal Bootloader
-a 2 ist der Bootloader 2.0
Beim Bootloader 2.0 wird das bin File an eine andere Adresse im Flash geladen als beim Orginal Bootloader.

Damit wird dann die upload Methode orginal Bootloader verwendet
dfu-util -d 1eaf:0003 -a 1 -D Maple

Gruß Ralf

Habe gerade den Rechner ausgeschaltet, werde ich heute Abend testen :)

Reinhard.M

Zitat von: Reinhard.M am 04 September 2021, 15:32:48
Habe gerade den Rechner ausgeschaltet, werde ich heute Abend testen :)
Kaum macht man es richtig, schon funktioniert's :)
Besten Dank für den Stubser in die richtige Richtung.

Gruß Reinhard

Ralf9

Hab mal wieder bei Amazon, ebay und Ali Express nach dem Maple Mini gesucht, die grünen scheint es nicht mehr zu geben nur noch die blauen.
https://www.amazon.de/s?k=STM32F103CBT6
Interessant unter welchen Bezeichnungen diese u.a. angeboten werden:
ZitatOumefar Hauptsteuerplatine Professional High Presision 1pcs für Industrie für Fabrik

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Romoker

Hallo Ralf,
ich möchte Signale von meiner Wetterstation empfangen und SOMFY-Signale empfangen und senden können. Dafür benötige ich zwei 433 MHz-Module: 433.92 MHz für die Wetterstation und 433.20 MHz für SOMFY.

Ist es möglich mit einem MapleSDuino auf der Ranseyer-Platine zwei 433 MHz-Module mit OOK/ASK zu betreiben?

Im Wiki ließt sich das so, als ob maximal zwei 868MHz- und nur ein 433 MHz-Modul betrieben werden können. Andererseits sprichst Du hier im Thread https://forum.fhem.de/index.php/topic,106278.msg1111414.html#msg1111414 davon, die Firmware dementsprechend zu erweitern. In der Release-Note V4.1.2-dev210205 ist zu lesen, dass nun auch mit dem cc1101 Modul A slowRF empfangen und gesendet werden kann. Ich bin verunsichert.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Ralf9

Zitatich möchte Signale von meiner Wetterstation empfangen und SOMFY-Signale empfangen und senden können. Dafür benötige ich zwei 433 MHz-Module: 433.92 MHz für die Wetterstation und 433.20 MHz für SOMFY.
Es kann sein, daß dafür ein cc1101 Modul reicht, wenn Du eine Frequenz zwischen 433.92 MHz und 433.20 MHz wählst und die Bandbreite etwas erhöhst. Es gibt im Forum einige denen es gelungen ist.

ZitatIst es möglich mit einem MapleSDuino auf der Ranseyer-Platine zwei 433 MHz-Module mit OOK/ASK zu betreiben?
Es sind mit meiner Firmware beliebige Kombinationen von 433 und 868 MHz möglich. Es gibt die Beschränkung, daß slowrf nur beim Modul A und B möglich sind.
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Romoker

Super, dann habe ich sogar zwei Optionen. Dann werde ich mal mit der Ersten starten.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Fritz Muster

Zitat von: Romoker am 12 Januar 2022, 21:07:46
Im Wiki ließt sich das so, als ob maximal zwei 868MHz- und nur ein 433 MHz-Modul betrieben werden können.

Habe das im Wiki entsprechend ergänzt/angepasst.

Viele Grüße
Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

Ralf9

Hallo,

ich bin z.Zt. dabei WMBus S, T und C einzubauen. Ich verwende dabei die Routinen von der culw.
Diese Routine funktioniert so nicht
uint16 verifyCrcBytesCmodeB(uint8* pByte, uint8* pPacket, uint16 packetSize)
{
  uint16 crc = 0;
  uint16 i = 0;
  if (packetSize > 128) {
...
  }

  while (i < packetSize - 2) {
    crc = crcCalc(crc, pByte[i]);
    pPacket[i] = pByte[i];
    ++i;
  }

  if ((~crc) != (pByte[packetSize - 2] << 8 | pByte[packetSize - 1])) {
    return (PACKET_CRC_ERROR);
  }

  pPacket[packetSize - 2] = pByte[packetSize - 2];
  pPacket[packetSize - 1] = pByte[packetSize - 1];

  return (PACKET_OK);
}


Weiß jemand warum diese Abfrage beim Maple Mini und der Arduino IDE so nicht funktioniert?
if ((~crc) != (pByte[packetSize - 2] << 8 | pByte[packetSize - 1])) {

so auch nicht
if ((~crc) != ((uint16_t)pByte[packetSize - 2] << 8 | pByte[packetSize - 1])) {

So funktionierts:
uint16_t ic;
uint16_t ii;
ic = ~crc
ii = (uint16_t)pByte[packetSize - 2] << 8 | pByte[packetSize - 1]
if (ic != ii) {


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

juergs

Hallo Ralf,

habe versucht es zu vereinfachen:

https://www.tutorialspoint.com/compile_c_online.php

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>


int main()
{
    printf("Hello, World!\n");
   
   
    uint16_t ic  = 0;
    uint16_t ii  = 0;
    uint16_t crc = 0;
   
    uint8_t byte_h = 128;
    uint8_t byte_l = 1;   
   
   
    printf("crc = %u\n", crc);
    printf("crc = %x\n", crc);
   
    ic = ~crc;
   
    printf("~crc = %u => %x\n", ic, ic);
    printf("byte_h/l = %u  ->  %u\n", byte_h, byte_l);
   
   
    printf("byte_h shifted => %u => %x\n", byte_h<<8, byte_h<<8);
   
    //--- Fall 1
    bool isEqual =  ( (~crc) != (byte_h << 8 | byte_l) );
    printf("isEqual = %u \n", isEqual);
   
    //--- Fall 2
    ii = ((uint16_t) byte_h << 8) | byte_l ;
   
    printf("ii = %u  =>  %x\n", ii, ii);
   
    return 0;
}


liefert:
Zitat$gcc -o main *.c -lm
$main
Hello, World!
crc = 0
crc = 0
~crc = 65535 => ffff
byte_h/l = 128  ->  1
byte_h shifted => 32768 => 8000
isEqual = 1
ii = 32769  =>  8001


isEqual ist False.

Bei Fall1 scheint byte_h <<8 (byte_h shifted) automatisch in den nächst höheren Datentyp gecastet zu werden...

Ralf9

Damit kann ichs nachstellen. Hier funktioniert der Fall 1 nicht, nur warum scheint der Fall 1 beim Arduino zu funktionieren?

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

int main()
{
    bool isnotEqual;
    uint16_t ic;
    uint16_t ii;
   
    uint16_t crc = 0x2233;
    uint8_t byte_h = 0xdd;
    uint8_t byte_l = 0xcc;
   
    printf(" crc = %x\n", crc);
    ic = ~crc;
    printf("~crc = %x\n", ic);
    printf("byte_h/l = %x / %x\n", byte_h, byte_l);
    printf("byte_h shifted => %x\n", byte_h<<8);
   
    //--- Fall 1
    isnotEqual =  ( (~crc) != (byte_h << 8 | byte_l) );
    printf("isnotEqual = %u \n", isnotEqual);
   
    //--- Fall 2
    ii = (byte_h << 8) | byte_l ;
    isnotEqual = ( ic != ii);
    printf("isnotEqual = %u , ii = %x\n", isnotEqual, ii);
   
    return 0;

}

Zitat$gcc -o main *.c -lm
$main
crc = 2233
~crc = ddcc
byte_h/l = dd / cc
byte_h shifted => dd00
isnotEqual = 1
isnotEqual = 0 , ii = ddcc
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

juergs

Hallo Ralf,

es liegt wohl am "~crc::) :o Im Speziellen am ,,~"-Operator.

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>

int main()
{
    bool isnotEqual;
    uint16_t ic;
    uint16_t ii;
   
    uint16_t crc = 0x2233;
    uint8_t byte_h = 0xdd;
    uint8_t byte_l = 0xcc;
   
    printf(" crc = %x\n", crc);
   
    ic = ~crc;
    printf("~crc = %x\n", ic);
   
    printf("byte_h/l = %x / %x\n", byte_h, byte_l);
    printf("byte_h shifted => %x\n", byte_h<<8);
    printf("toUInt16 => %x\n", (byte_h << 8 | byte_l));
   
   
    //--- Fall 1
    isnotEqual =  ( (~crc) != ( byte_h << 8 | byte_l ) );
    printf("isnotEqual_a = %u \n", isnotEqual);
   
    isnotEqual =  ( (ic) != (byte_h << 8 | byte_l) );
    printf("isnotEqual_b = %u \n", isnotEqual);
   
    //--- Fall 2
    ii = (byte_h << 8) | byte_l ;
    isnotEqual = ( ic != ii);
    printf("isnotEqual = %u , ii = %x\n", isnotEqual, ii);
    printf("true = %u , false = %u\n", true, false);
   
    return 0;
   
}


Ergebnis:
======

Zitat
$gcc -o main *.c -lm
$main
crc = 2233
~crc = ddcc
byte_h/l = dd / cc
byte_h shifted => dd00
toUInt16 => ddcc
isnotEqual_a = 1
isnotEqual_b = 0
isnotEqual = 0 , ii = ddcc
true = 1 , false = 0


Vielleicht etwas in dieser Richtung: https://stackoverflow.com/questions/48106169/with-new-gcc-version-getting-warning-bool-comparision

Ralf9

Mit einem cast funktionierts auch, nur warum brauch ich da ein cast (uint16_t), wenn crc schon uint16_t ist?
isnotEqual =  ( (uint16_t)(~crc) != ( byte_h << 8 | byte_l ) );
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ralf9

Hallo,

in der Anlage ist von der V4.2.2 für den Maple sduino USB und den Maple CUL USB vorab eine Testversion (ist noch nicht im Github)

Es ist dafür die v3.4.10-dev_ralf meiner Variante des 00_SIGNALduino.pm notwendig
https://forum.fhem.de/index.php/topic,111653.msg1058900.html#msg1058900

Es kann damit WMBus S, T und C empfangen und  WMBus S und T gesendet werden. Es funktioniert nicht am vierten cc1101 Modul D und nicht mehr als ein cc1101 Modul gleichzeitig

Beim Senden mit "set raw" kann auch das CUL Format bss... und bst.. verwendet werden,
Mit z.B.
set raw sduino bss0F44AE0C7856341201074447780B12436587255D
wird das gesendet
SN;N=11;D=bss0F44AE0C7856341201074447780B12436587255D;


Beim Empfang können bei Bedarf mit
get sduino raw TD
auch Debugausgaben aktiviert werden.
Mit "get sduino raw Td" werden sie wieder ausgeschaltet.

Bei aktivierten Debugausgaben wird bei jedem empfangenen sync "mbSyn" ausgegeben.

Es kann z.B. so aussehen:
mbSyn
L=93
L=62
L=31
mb L=64 S=0
MN;D=374468500905276739C3BFFFA2109F27CE480158623A0000819E1D8DA7BD34EA579A562B000000000000D0C01E0279CC4D5597C5852269AFAA2B7E2C37E92B048047;N=12;

dabei sind "L=xx" die Bytes die noch vom cc1101 FIFO  empfangen werden müssen.
"mb L=64 S=0" bedeuted, daß die Nachricht nach der Decodierung eine Länge von 64 Byte hat. Bei S > 0 gab es einen Fehler

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Chatty

Zitat von: Ralf9 am 17 Juli 2021, 12:25:00
Hilfen bei der Dokumentation, Entwicklung und Änderungs- und Ergänzungswünsche sind natürlich gerne willkommen.

Ich habe ein ESP32 Devkit V4, ein CC1101-433 und ein CC1101-868. Beide an einem ESP zu betreiebn, wäre natürlich toll. Außerdem wünsche ich mir, dass mein Sduino meine Klingel "hört".

Aktuell ist der cc1101-868 so verbunden und funktioniert mit SIGNALDuino_ESP32cc1101_3.5.0-dev+20210808.

An welche Pins muss nun der andere cc1101? Sind die Pulse für meine Klingel klein genug? Stellst du bitte noch V4.2.2 für ESP32 zur Verfügung?

Ralf9

ZitatSind die Pulse für meine Klingel klein genug?
Nein bei den fertigen bin Files ist die default "pulseMin  90"
Du bist bis jetzt der einzigste, der ein kleineres pulseMin benötigt.
Es muss erstmal rausgefunden werden wie klein die pulseMin sein muss, das es funktioniert.
Kannst Du die firmware selbst kompilieren oder benötigst Du dabei Hilfe?

ZitatStellst du bitte noch V4.2.2 für ESP32 zur Verfügung?
ja, kommt demnächst

ZitatAn welche Pins muss nun der andere cc1101?
GPIO25  -> GDO2
GPIO27  -> CSN
GPIO26  -> GDO0

FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7