AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

papa

#450
Also da geht noch was :-)

Ohne AES, SPI-Library, einfache Status-LED und Debug-Ausgaben abgeschalten - komme ich knapp drunter. Keine Ahnung, ob dass dann noch richtig tut ?

Device: atmega328p

Program:   16214 bytes (49.5% Full)
(.text + .data + .bootloader)

Data:        713 bytes (34.8% Full)
(.data + .bss + .noinit)


Finished building target: HM_RC_4


Ich hänge den angepassten Sketch hier mal an. Funktioniert nur im Master.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Stütti

Wow, sehr cool. Danke!

Habe gestern auch noch denselben Branch für einen ATmega328p kompiliert und mal testweise auf einen neueren Arduino aufgespielt. Lief ohne Probleme durch!
FHEM auf Pi 4 + FTUI auf Pi 3, Eltako 14, SignalESP, JeeLink, EasyESP, ArduCounter, eBus-Koppler, openDTU

Xent

Moin,
wie schauts mit meinen Änderungen aus?
Konntest du schon weiter testen?

Ich kann nur berichten, dass es seitdem 1a läuft  ;D

papa

Zitat von: Xent am 26 August 2017, 07:35:07
Moin,
wie schauts mit meinen Änderungen aus?
Konntest du schon weiter testen?

Nein -leider noch nicht.

Zitat von: Xent am 26 August 2017, 07:35:07
Ich kann nur berichten, dass es seitdem 1a läuft  ;D

Ein Grund mehr, mich mal dran zu machen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

rippi46

#454
Hallo,

erst einmal ein dickes Lob für die tolle Arbeit hier.

Versuche schon seit Tagen mit der Asksin++ einen HM-Motion-Detector zu bauen.
In der Zwischenzeit habe ich ein HM-Devices das so einigermaßen funktioniert.

Habe mir die Asksin++-V1 runter geladen, dann diverse Libraries besorgt und nach vielen Fehlversuchen es geschafft ein HM-Motionsdetector in Fhem zu integrieren.
Habe dann versucht einen Bootloader zu erzeugen, damit ich die Firmware besser updaten kann. Mit der makeota.html vom "Relay Platine auf HM, MySensors, ZWave Basis" habe ich einen Bootloader geflasht (mit angepasstem  HM-Typ 004A für HM-SEC-MDIR).

Beim Versuch die Firmware zu flashen bricht es mit einem missing Ack ab. Flashe ich dagegen die Relayplatinen-Firmware funktioniert das OTA-Flashen.

hier das Listing meines Motiondetector:

Internals:
   CFGFN
   DEF        567890
   IODev      cul868_HM
   LASTInputDev cul868_HM
   MSGCNT     90
   NAME       HM_567890
   NOTIFYDEV  global
   NR         1066
   STATE      motion
   TYPE       CUL_HM
   cul868_HM_MSGCNT 90
   cul868_HM_RAWMSG A0D46A241567890F11324013E0080::-22:cul868_HM
   cul868_HM_RSSI -22
   cul868_HM_TIME 2017-08-27 13:43:00
   lastMsg    No:46 - t:41 s:567890 d:F11324 013E0080
   protCmdDel 9
   protLastRcv 2017-08-27 13:43:00
   protResnd  7 last_at:2017-08-27 13:34:41
   protResndFail 2 last_at:2017-08-27 13:35:17
   protSnd    155 last_at:2017-08-27 13:43:00
   protState  CMDs_done
   rssi_at_cul868_HM lst:-22 cnt:90 avg:-22.86 max:-20 min:-35
   rssi_cul868_HM avg:-119.6 max:-104 min:-123 lst:-121 cnt:10
   READINGS:
     2017-08-27 13:00:05   Activity        alive
     2017-08-27 13:00:06   CommandAccepted yes
     2017-08-27 13:00:05   D-firmware      1.6
     2017-08-27 13:00:05   D-serialNr      SW9K9TYC3I
     2017-08-27 13:00:06   PairedTo        0xF11324
     2017-08-27 13:00:06   R-brightFilter  7
     2017-08-27 13:00:06   R-captInInterval off
     2017-08-27 13:00:06   R-evtFltrNum    1
     2017-08-27 13:00:06   R-evtFltrPeriod 4.5 s
     2017-08-27 13:00:06   R-minInterval   240
     2017-08-27 13:00:06   R-pairCentral   0xF11324
     2017-08-27 13:00:06   R-sign          off
     2017-08-27 13:39:27   battery         ok
     2017-08-27 13:43:00   brightness      0
     2017-08-27 13:39:27   cover           closed
     2017-08-27 13:43:00   motion          on (to cul868_HM)
     2017-08-27 13:43:00   motionCount     62_next:240s
     2017-08-27 13:39:16   motionDuration  851
     2017-08-27 13:25:18   powerOn         2017-08-27 13:25:18
     2017-08-27 13:39:27   recentStateType info
     2017-08-27 13:43:00   state           motion
     2017-08-27 13:43:00   trigDst_F11324  noConfig
     2017-08-27 13:43:00   trigger_cnt     62
     RegL_00.:
       VAL
   helper:
     HM_CMDNR   70
     PONtest    0
     cSnd       01F1132456789000040000000000,01F1132456789000040000000000
     cfgChkResult No regs found for:HM_567890


     getCfgList all
     getCfgListNo ,4
     mId        004A
     moStart    1503833967.79771
     peerIDsRaw ,00000000
     rxType     28
     supp_Pair_Rep 0
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newChn     +567890,00,00,00
       nextSend   1503834180.32141
       prefIO
       rxt        2
       vccu
       p:
         567890
         00
         00
         00
     mRssi:
       mNo        46
       io:
         cul868_HM  -20
     prt:
       bErr       0
       sProc      0
       sleeping   1
       rspWait:
     q:
       qReqConf
       qReqStat
     role:
       chn        1
       dev        1
     rpt:
       IO         cul868_HM
       flg        A
       ts         1503834180.22294
       ack:
         HASH(0x7e75378)
         468002F1132456789001010000
         HASH(0x7e75378)
         468002F1132456789000
     rssi:
       at_cul868_HM:
         avg        -22.8666666666667
         cnt        90
         lst        -22
         max        -20
         min        -35
       cul868_HM:
         avg        -119.6
         cnt        10
         lst        -121
         max        -104
         min        -123
     shadowReg:
       RegL_01.    22:C8
     tmpl:
   nb:
     cnt        1
Attributes:
   IODev      cul868_HM
   actCycle   000:20
   actStatus  alive
   autoReadReg 4_reqStatus
   expert     2_raw
   firmware   1.6
   model      HM-SEC-MDIR
   peerIDs    00000000,
   room       CUL_HM
   serialNr   SW9K9TYC3I
   subType    motionDetector


Versuche jetzt seit Stunden sämtliche Tools aus um einen funtionioerenden Bootloader zu erzeugen - leider ohne Erfolg.

Meine Vorgehensweise:

Ich Erzeuge mit der makeote.html einen Bootloader. Diesen flashe ich mit:
avrdude -p m328p -c usbtiny
avrdude -p m328p -c usbtiny -U lfuse:w:0xE2:m -U hfuse:w:0xD0:m -U efuse:w:0x06:m -U lock:w:0x2F:m -e -Uflash:w:SW9K9TYC3I.hex:i


anschließend erzeuge ich mit der Arduino IDE ein Hex-File der Firmware und wandle diese mit hex2eq3.php in ein Firmwarefile für flash-ota um.

sudo ./flash-ota -f HM-SEC-MDIR.eq3 -s SW9K9TYC3I -c /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A103U5MA-if00-port0

Beim Versuch diese über OTA zu flashen bricht der ganze Vorgang mit "missing Ack" ab.

Vielleicht kann mir jemand etwas Licht ins Dunkel bringen, was ich vielleicht vergessen oder falsch gemacht habe.

Desweiteren wollte ich diverse Parameter unter fhem vom Motiondetector verändern, kann aber nur "ledOnTime" als einzigen Wert verändern.


Gruß rippi

das sind die Libraries und der Sketch, den ich verwende:


FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

papa

Schau Dir bitte mal das Readme im bootloader/avr im Master Branch an. Da stehen die einzelnen Schritte alle drin. Da ist auc ein generisches makeota.html drin. Manche Example bringen auch eine eigene Version mit, da dort extra Optionen gesetzt werden können.

Wenn beim OTA-Flashen "Missing ACK" Fehler kommen, so liegt das nicht am Image, sondern an der Funkverbindung. Am besten den Abstand zwischen Sender und Empfänger mal verändern.

Wenn Du die Parameter nicht ändern kannst, könnten Bootloader und Firmware nicht passen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

rippi46

Hallo

habe jetzt mit der generischen makeota.html den Bootloader erzeugt und mit:

avrdude -p m328p -c usbtiny -U lfuse:w:0xE2:m -U hfuse:w:0xD0:m -U efuse:w:0x06:m -U lock:w:0x2F:m -e -Uflash:w:SW9K9TYC3I.hex:i

auf den arduino geflasht.

dann mit der Arduino  IDE mit:

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------

/*
* Setup defines to configure the library.
* Note: If you are using the Eclipse Arduino IDE you will need to set the
* defines in the project properties.
*/
#ifndef __IN_ECLIPSE__
  #define USE_AES
  #define HM_DEF_KEY 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10
  #define HM_DEF_KEY_INDEX 0
#endif

#include <AskSinPP.h>
#include <PinChangeInt.h>
#include <TimerOne.h>
#include <LowPower.h>

#include <MultiChannelDevice.h>
#include <BatterySensor.h>

#include <TSL2561.h>
#include <Wire.h>

// define this to read the device id, serial and device type from bootloader section
#define USE_OTA_BOOTLOADER

#ifdef USE_OTA_BOOTLOADER
  #define OTA_MODEL_START  0x7ff0 // start address of 2 byte model id in bootloader
  #define OTA_SERIAL_START 0x7ff2 // start address of 10 byte serial number in bootloader
  #define OTA_HMID_START   0x7ffc // start address of 3 byte device id in bootloader
#else
  // device ID
  #define DEVICE_ID HMID(0x56,0x78,0x90)
  // serial number
  #define DEVICE_SERIAL "SW9K9TYC3I"
#endif

// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED_PIN 4
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8
// Arduino pin for the PIR
// A0 == PIN 14 on Pro Mini
#define PIR_PIN 3


#define BATTERY_LOW 22
#define BATTERY_CRITICAL 19


// number of available peers per channel
#define PEERS_PER_CHANNEL 6

// all library classes are placed in the namespace 'as'
using namespace as;

// Create an SFE_TSL2561 object, here called "light":
TSL2561 light;

void motionISR ();

class MotionList1Data {
public:
  uint8_t EventFilterPeriod : 4;     // 0x01
  uint8_t EventFilterNumber : 4;     // 0x01
  uint8_t MinInterval       : 3;     // 0x02
  uint8_t CaptureWithinInterval : 1; // 0x02
  uint8_t BrightnessFilter  : 4;     // 0x02
  uint8_t AesActive         :1;      // 0x08, s:0, e:1
  uint8_t LedOntime;                 // 0x20

  static uint8_t getOffset(uint8_t reg) {
    switch (reg) {
      case 0x01: return 0;
      case 0x02: return 1;
      case 0x08: return 2;
      case 0x20: return 3;
      default: break;
    }
    return 0xff;
  }

  static uint8_t getRegister(uint8_t offset) {
    switch (offset) {
      case 0:  return 0x01;
      case 1:  return 0x02;
      case 2:  return 0x08;
      case 3:  return 0x20;
      default: break;
    }
    return 0xff;
  }
};

class MotionList1 : public ChannelList<MotionList1Data> {
public:
  MotionList1(uint16_t a) : ChannelList(a) {}

  uint8_t eventFilterPeriod () const { return getByte(0,0x0f,0); }
  bool eventFilterPeriod (uint8_t value) const { return setByte(0,value,0x0f,0); }
  uint8_t eventFilterNumber () const { return getByte(0,0xf0,4); }
  bool eventFilterNumber (uint8_t value) const { return setByte(0,value,0xf0,4); }

  uint8_t minInterval () const { return getByte(1,0x07,0); }
  bool minInterval (uint8_t value) const { return setByte(1,value,0x07,0); }
  bool captureWithinInterval () const { return isBitSet(1,0x08); }
  bool captureWithinInterval (bool value) const { return setBit(1,0x08,value); }
  uint8_t brightnessFilter () const { return getByte(1,0xf0,4); }
  bool brightnessFilter (uint8_t value) const { return setByte(1,value,0xf0,4); }

  bool aesActive () const { return isBitSet(2,0x01); }
  bool aesActive (bool s) const { return setBit(2,0x01,s); }

  uint8_t ledOntime () const { return getByte(3); }
  bool ledOntime (uint8_t value) const { return setByte(3,value); }

  void defaults () {
    eventFilterPeriod(1);
    eventFilterNumber(1);
    minInterval(4);
    captureWithinInterval(false);
    brightnessFilter(4);
    aesActive(false);
    ledOntime(100);
  }
};

BatterySensor battery;
// BatterySensorExt battery;
// BatterySensorUni battery(16,7); // A2 & D7

class MotionEventMsg : public Message {
public:
  void init(uint8_t msgcnt,uint8_t ch,uint8_t counter,uint8_t brightness,uint8_t next) {
    Message::init(0xd,msgcnt,0x41,Message::BIDI|Message::WKMEUP,ch & 0x3f,counter);
    pload[0] = brightness;
    pload[1] = (next+4) << 4;
  }
};

class MotionChannel : public Channel<MotionList1,EmptyList,List4,PEERS_PER_CHANNEL>, public Alarm {

  class QuietMode : public Alarm {
  public:
    bool  enabled;
    bool  motion;
    MotionChannel& channel;
    QuietMode (MotionChannel& c) : Alarm(0), enabled(false), motion(false), channel(c) {}
    virtual ~QuietMode () {}
    virtual void trigger (AlarmClock& clock) {
      DPRINTLN(F("minInterval End"));
      enabled = false;
      if( motion == true ) {
        motion = false;
        channel.motionDetected();
      }
    }
  };

  // send the brightness every 4 minutes to the master
  #define LIGHTCYCLE seconds2ticks(4*60)
  class Cycle : public Alarm {
  public:
    MotionChannel& channel;
    Cycle (MotionChannel& c) : Alarm(LIGHTCYCLE), channel(c) {}
    virtual ~Cycle () {}
    virtual void trigger (AlarmClock& clock) {
      tick = LIGHTCYCLE;
      clock.add(*this);
      channel.sendState();
    }
  };

  // return timer ticks
  uint32_t getMinInterval () {
    switch( getList1().minInterval() ) {
      case 0: return seconds2ticks(15);
      case 1: return seconds2ticks(30);
      case 2: return seconds2ticks(60);
      case 3: return seconds2ticks(120);
    }
    return seconds2ticks(15);
  }

private:
  MotionEventMsg   msg;
  uint8_t          counter;
  QuietMode        quiet;
  Cycle            cycle;

public:
  MotionChannel () : Channel(), Alarm(0), counter(0), quiet(*this), cycle(*this) {
    aclock.add(cycle);
    pinMode(PIR_PIN,INPUT);
    pirInterruptOn();
  }
  virtual ~MotionChannel () {}

  uint8_t status () const {
    return brightness();
  }

  uint8_t flags () const {
    return battery.low() ? 0x80 : 0x00;
  }

  void sendState () {
    pirInterruptOff();
    Device& d = device();
    d.sendInfoActuatorStatus(d.getMasterID(),d.nextcount(),*this);
    pirInterruptOn();
  }

  uint8_t brightness () const {
    static uint16_t maxvalue = 0;
    uint8_t value = 0;
    unsigned int data0, data1;
    if (light.getData(data0,data1)) {
      double lux;    // Resulting lux value
      light.getLux (data0,data1,lux);
      uint16_t current = (uint16_t)lux;
      DPRINT(F("light: ")); DHEXLN(current);
      if( maxvalue < current ) {
        maxvalue = current;
      }
      value = 200UL * current / maxvalue;
    }
    return value;
  }

  void pirInterruptOn () {
#if PIR_PIN == 3
    attachInterrupt(digitalPinToInterrupt(3), motionISR, RISING);
#else
    attachPinChangeInterrupt(PIR_PIN,motionISR,RISING);
#endif
  }

  void pirInterruptOff () {
#if PIR_PIN == 3
    detachInterrupt(digitalPinToInterrupt(3));
#else
    detachPinChangeInterrupt(PIR_PIN);
#endif
  }

  // this runs synch to application
  virtual void trigger (AlarmClock& clock) {
    if( quiet.enabled == false ) {
      DPRINTLN(F("Motion"));
      // start timer to end quiet interval
      quiet.tick = getMinInterval();
      quiet.enabled = true;
      aclock.add(quiet);
      // blink led
      if( sled.active() == false ) {
        sled.ledOn( centis2ticks(getList1().ledOntime()) / 2);
      }
      msg.init(device().nextcount(),number(),++counter,brightness(),getList1().minInterval());
      device().sendPeerEvent(msg,*this);
    }
    else if ( getList1().captureWithinInterval() == true ) {
      // we have had a motion during quiet interval
      quiet.motion = true;
    }
  }

  // runs in interrupt
  void motionDetected () {
    // cancel may not needed but anyway
    aclock.cancel(*this);
    // activate motion message handler
    aclock.add(*this);
    }
};


MultiChannelDevice<MotionChannel,1> sdev(0x20);
void motionISR () { sdev.channel(1).motionDetected(); }


class CfgButton : public Button {
public:
  CfgButton () {
    setLongPressTime(seconds2ticks(3));
  }
  virtual void state (uint8_t s) {
    uint8_t old = Button::state();
    Button::state(s);
    if( s == Button::released ) {
      sdev.startPairing();
    }
    else if( s == longpressed ) {
      if( old == longpressed ) {
        sdev.reset(); // long pressed again - reset
      }
      else {
        sled.set(StatusLed::key_long);
      }
    }
  }
};

CfgButton cfgBtn;
void cfgBtnISR () { cfgBtn.check(); }

void setup () {
#ifndef NDEBUG
  Serial.begin(57600);
  DPRINTLN(ASKSIN_PLUS_PLUS_IDENTIFIER);
#endif
  if( eeprom.setup(sdev.checksum()) == true ) {
    sdev.firstinit();
  }

  light.begin();
  // If gain = false (0), device is set to low gain (1X)
  // If gain = high (1), device is set to high gain (16X)
  // If time = 0, integration will be 13.7ms
  // If time = 1, integration will be 101ms
  // If time = 2, integration will be 402ms
  // If time = 3, use manual start / stop to perform your own integration
  light.setTiming(0,2); //gain,time);
  light.setPowerUp();

  sled.init(LED_PIN);

  cfgBtn.init(CONFIG_BUTTON_PIN);
  attachPinChangeInterrupt(CONFIG_BUTTON_PIN,cfgBtnISR,CHANGE);
  radio.init();

#ifdef USE_OTA_BOOTLOADER
  sdev.init(radio,OTA_HMID_START,OTA_SERIAL_START);
  sdev.setModel(OTA_MODEL_START);
#else
  sdev.init(radio,DEVICE_ID,DEVICE_SERIAL);
  sdev.setModel(0x00,0x4a);
#endif
  sdev.setFirmwareVersion(0x16);
  // TODO check sub type and infos
  sdev.setSubType(Device::MotionDetector);
  sdev.setInfo(0x01,0x01,0x00);

  radio.enableGDO0Int();
  aclock.init();

  sled.set(StatusLed::welcome);
  // set low voltage to 2.2V
  // measure battery every 1h
  //battery.init(BATTERY_LOW,seconds2ticks(60UL*60));
  // init for external measurement
  //battery.init(BATTERY_LOW,seconds2ticks(60UL*60),refvoltage,divider);
  // UniversalSensor setup
  battery.init(BATTERY_LOW,seconds2ticks(60UL*60));
  battery.critical(BATTERY_CRITICAL);
}

void loop() {
  bool worked = aclock.runready();
  bool poll = sdev.pollRadio();
  if( worked == false && poll == false ) {
    // deep discharge protection
    // if we drop below critical battery level - switch off all and sleep forever
    if( battery.critical() ) {
      radio.setIdle();
      // this call will never return
      activity.sleepForever();
    }
    // if nothing to do - go sleep
    activity.savePower<Sleep>();
  }
}


das Hex-File für die Firmware erzeugt.

Mit :

php hex2eq3.php --inFile HM-SEC-MDIR.hex --outFile HM-SEC-MDIR.eq3 --spmPageSize 256 --hexEndAddress 0xDFFE --outFormat eq3 --pathTo-srec_cat /usr/bin/srec_cat

das eq3-File erzeugt und mit:

sudo ./flash-ota -f HM-SEC-MDIR.eq3 -s SW9K9TYC3I -c /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A103U5MA-if00-port0

versucht auf den Arduino zu flashen.
Bekomme aber diese Ausgabe:

vdr@vdr-media:~/hmcfgusb$ sudo ./flash-ota -f HM-SEC-MDIR.eq3 -s SW9K9TYC3I -c /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A103U5MA-if00-port0
HomeMatic OTA flasher version 0.102-git

Reading firmware from HM-SEC-MDIR.eq3...
Firmware with 224 blocks successfully read.
Opening culfw-device at path /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A103U5MA-if00-port0 with speed 38400
Requesting firmware version
culfw-device firmware version: a-culfw
Entering 10k-mode
Waiting for device with serial SW9K9TYC3I
Device with serial SW9K9TYC3I (HMID: 567890) entered firmware-update-mode
Initiating remote switch to 100k
Entering 100k-mode
Has the device switched?
Yes!
Flashing 224 blocks: 0001/0224 /
Missing ACK!
Flashing 224 blocks: 0001/0224 /
Missing ACK!
Flashing 224 blocks: 0001/0224 /
Missing ACK!
Flashing 224 blocks: 0001/0224 /
Missing ACK!
Flashing 224 blocks: 0001/0224 /
Missing ACK!

Too many errors, giving up!


wenn ich aber das angebe:

sudo ./flash-ota -f HM-Relay-Universal.eq3 -s SW9K9TYC3I -c /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A103U5MA-if00-port0

wir die Firmware geflasht, obwohl ich einen Bootloader für einen Motiondetektor geflasht habe.

Muß ich noch beim *.ino-File etwas spezielles beachten?

Danke für deine Hilfe!

Gruß rippi

FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

papa

#457
Du hast das Readme immer noch nicht gelesen. Sonst hätest Du prepareforota.sh benutzt, um das eq3 zu erzeugen. Bitte nochmal lesen und diesen Schritten folgen.

Dem Bootloader ist es egal, welche Software geflasht wird, solange die Daten richtig angeliefert werden.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Wzut

@rippi46 , muss es denn unbedingt OTA sein ?
Du kannst auch den einfachen Weg gehen (ohne OTA Unterstützung) und in der Arduino IDE direkt "Hochladen mit Programmer" ausführen.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

rippi46

@Wzut mit der arduino IDE habe ich es schon geschafft, sonst hätte ich kein fhem-device das so einigermaßen funktioniert.

Da ich relativ viele Geräte und Sensoren im Haus verteilt habe, wäre es schön es würde über OTA funktionieren. Leider funktionieren noch nicht alle Tools unter Windows oder unter Ubuntu, sodass ich zuerst meine Entwicklungsumgebung anpassen muss.

@papa was muss ich in fhem anpassen, das ich die Parameter des Motionsdetector verändern kann?

Habe das Readme gelesen, bekomme aber leider nicht alle Files erzeugt . Bekomme unter Windows einfach das eq3-File nicht hin unt unter Ubuntu bekomme ich den Usbtiny nicht zum laufen.

Ich glaube das wird heute nichts mehr.

Gruss rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

papa

Zitat von: rippi46 am 27 August 2017, 21:42:21
@papa was muss ich in fhem anpassen, das ich die Parameter des Motionsdetector verändern kann?

Nichts. Funktioniert so wie bei allen HM Geräten. Nach dem Pairen ein getConfig. Dann geht set DEVICE regSet Register Wert.

Zitat von: rippi46 am 27 August 2017, 21:42:21
Habe das Readme gelesen, bekomme aber leider nicht alle Files erzeugt . Bekomme unter Windows einfach das eq3-File nicht hin unt unter Ubuntu bekomme ich den Usbtiny nicht zum laufen.

Hast Du das srecord aus dem Git verwendet ? Am besten das Respository clonen und dann direkt im avr/bootloader Verzeichnis das prepareforota.sh aufrufen. Wie auch im Readme geschrieben muss dafür eine Cygwin-Umgebung installiert sein, damit die Shell-Skripte ausgeführt werden können.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

rippi46

Hallo,

habe es jetzt endlich geschafft die Firmware zu erzeugen und OTA zu flashen.

Wollte das ganze halt unter Linux zum Laufen bringen. So muss ich für das erzeugen der Firmware den Windowsrechner bemühen.

Hatte ursprünglich ein MinGW-Shell, mit der die php-Scripte nicht liefen. Nach der Installation von Cygwin mit bash und php konnte ich die Firmware nach anfänglichen Schwierigkeiten(die Hex-Datei darf nicht im gleichen Verzeichnis liegen) erzeugen.

Das Setzen der Register werde ich dann heute Abend testen.

Danke nochmal für eure Hilfe.


Gruss rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

papa

Na das klingt doch schon mal gut. Ich bin gerade dabei, ein prepare-Script zu machen, welches keine weiteren installierten Tools benötigt - also komplett in der bash läuft. Ich hänge das hier mal an. Kannst Du auch gerne mal ausprobieren. Ist allerdings noch nicht gut getestet und etwas langsam.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

rippi46

#463
Aufrufen mit:

./prepota HM-SEC-MDIR.ino.hex

erzeugt als Ausgabe eine Art HEXDump für ca 18s-20s, aber es wird keine eq3-Datei erzeugt.

oder mache ich etwas falsch?

Gruss rippi


PS: wollte einen alten 868er Cul zu einem HM-Device umbauen und habe den Sketch des Motion-detector aus dem Master-Branch genommen.
und im Sketch die Zeile typedef Radio<SPIType,2> RadioType; in typedef Radio<SPIType,3> RadioType; geändert.

Leider kann ich den Sketch nicht compilieren.
In file included from C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:17:0:

E:\Arduino\libraries\EnableInterrupt-0.9.7/EnableInterrupt.h:22:130: note: #pragma message: NOTICE: *** EnableInterrupt library PRIOR TO version 0.9.6. This is not a problem. Keep calm, and carry on. ***

#pragma message("NOTICE: *** EnableInterrupt library PRIOR TO version 0.9.6. This is not a problem. Keep calm, and carry on. ***")

                                                                                                                                  ^

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino: In member function 'void Hal::init()':

HM-SEC-MDIR:56: error: no matching function for call to 'Hal::init()'

     BaseHal::init();

                   ^

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:56:19: note: candidate is:

In file included from C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:18:0:

E:\Arduino\libraries\AskSinPP-master/AskSinPP.h:46:8: note: void as::AskSin<StatusLed, Battery, Radio>::init(const as::HMID&) [with StatusLed = as::StatusLed<4u>; Battery = as::BatterySensor; Radio = as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 3u>]

   void init (const HMID& id) {

        ^

E:\Arduino\libraries\AskSinPP-master/AskSinPP.h:46:8: note:   candidate expects 1 argument, 0 provided

In file included from C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:22:0:

E:\Arduino\libraries\AskSinPP-master/MultiChannelDevice.h: In instantiation of 'void as::ChannelDevice<HalType, ChannelType, ChannelCount, List0Type>::init(HalType&) [with HalType = Hal; ChannelType = as::MotionChannel<Hal, 6>; int ChannelCount = 1; List0Type = as::List0]':

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:96:16:   required from here

E:\Arduino\libraries\AskSinPP-master/MultiChannelDevice.h:126:5: error: no matching function for call to 'Hal::init(as::HMID&)'

     hal.init(id);

     ^

E:\Arduino\libraries\AskSinPP-master/MultiChannelDevice.h:126:5: note: candidate is:

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:55:8: note: void Hal::init()

   void init () {

        ^

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:55:8: note:   candidate expects 0 arguments, 1 provided

Mehrere Bibliotheken wurden für "Wire.h" gefunden
Benutzt: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
Nicht benutzt: E:\Arduino\libraries\Wire
Bibliothek EnableInterrupt-0.9.7 in Version 0.9.5 im Ordner: E:\Arduino\libraries\EnableInterrupt-0.9.7  wird verwendet
Bibliothek AskSinPP-master im Ordner: E:\Arduino\libraries\AskSinPP-master (legacy) wird verwendet
Bibliothek TimerOne in Version 1.1 im Ordner: E:\Arduino\libraries\TimerOne  wird verwendet
Bibliothek Low-Power-master in Version 1.6 im Ordner: E:\Arduino\libraries\Low-Power-master  wird verwendet
Bibliothek TSL2561 im Ordner: E:\Arduino\libraries\TSL2561 (legacy) wird verwendet
Bibliothek Wire in Version 1.0 im Ordner: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire  wird verwendet
exit status 1
no matching function for call to 'Hal::init()'


Fehlen da noch spezielle Libraries?


FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

papa

#464
Zitat von: rippi46 am 28 August 2017, 13:57:37
Aufrufen mit:

./prepota HM-SEC-MDIR.ino.hex

erzeugt als Ausgabe eine Art HEXDump für ca 18s-20s, aber es wird keine eq3-Datei erzeugt.

oder mache ich etwas falsch?

Nein - einfach in eine Datei umleiten

./prepota HM-SEC-MDIR.ino.hex > HM-SEC-MDIR.ino.hex.eq3


Zitat von: rippi46 am 28 August 2017, 13:57:37
PS: wollte einen alten 868er Cul zu einem HM-Device umbauen und habe den Sketch des Motion-detector aus dem Master-Branch genommen.
und im Sketch die Zeile typedef Radio<SPIType,2> RadioType; in typedef Radio<SPIType,3> RadioType; geändert.

Leider kann ich den Sketch nicht compilieren.
In file included from C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:17:0:

E:\Arduino\libraries\EnableInterrupt-0.9.7/EnableInterrupt.h:22:130: note: #pragma message: NOTICE: *** EnableInterrupt library PRIOR TO version 0.9.6. This is not a problem. Keep calm, and carry on. ***

#pragma message("NOTICE: *** EnableInterrupt library PRIOR TO version 0.9.6. This is not a problem. Keep calm, and carry on. ***")

                                                                                                                                  ^

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino: In member function 'void Hal::init()':

HM-SEC-MDIR:56: error: no matching function for call to 'Hal::init()'

     BaseHal::init();

                   ^

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:56:19: note: candidate is:

In file included from C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:18:0:

E:\Arduino\libraries\AskSinPP-master/AskSinPP.h:46:8: note: void as::AskSin<StatusLed, Battery, Radio>::init(const as::HMID&) [with StatusLed = as::StatusLed<4u>; Battery = as::BatterySensor; Radio = as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 3u>]

   void init (const HMID& id) {

        ^

E:\Arduino\libraries\AskSinPP-master/AskSinPP.h:46:8: note:   candidate expects 1 argument, 0 provided

In file included from C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:22:0:

E:\Arduino\libraries\AskSinPP-master/MultiChannelDevice.h: In instantiation of 'void as::ChannelDevice<HalType, ChannelType, ChannelCount, List0Type>::init(HalType&) [with HalType = Hal; ChannelType = as::MotionChannel<Hal, 6>; int ChannelCount = 1; List0Type = as::List0]':

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:96:16:   required from here

E:\Arduino\libraries\AskSinPP-master/MultiChannelDevice.h:126:5: error: no matching function for call to 'Hal::init(as::HMID&)'

     hal.init(id);

     ^

E:\Arduino\libraries\AskSinPP-master/MultiChannelDevice.h:126:5: note: candidate is:

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:55:8: note: void Hal::init()

   void init () {

        ^

C:\Users\breger\AppData\Local\Temp\arduino_modified_sketch_657701\HM-SEC-MDIR.ino:55:8: note:   candidate expects 0 arguments, 1 provided

Mehrere Bibliotheken wurden für "Wire.h" gefunden
Benutzt: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
Nicht benutzt: E:\Arduino\libraries\Wire
Bibliothek EnableInterrupt-0.9.7 in Version 0.9.5 im Ordner: E:\Arduino\libraries\EnableInterrupt-0.9.7  wird verwendet
Bibliothek AskSinPP-master im Ordner: E:\Arduino\libraries\AskSinPP-master (legacy) wird verwendet
Bibliothek TimerOne in Version 1.1 im Ordner: E:\Arduino\libraries\TimerOne  wird verwendet
Bibliothek Low-Power-master in Version 1.6 im Ordner: E:\Arduino\libraries\Low-Power-master  wird verwendet
Bibliothek TSL2561 im Ordner: E:\Arduino\libraries\TSL2561 (legacy) wird verwendet
Bibliothek Wire in Version 1.0 im Ordner: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire  wird verwendet
exit status 1
no matching function for call to 'Hal::init()'


Fehlen da noch spezielle Libraries?

Bitte das Example nochmal updaten. Da habe ich in der Lib noch eine Kleinigkeit umgebaut.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire