AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

micky0867

#1200
@papa: Danke, das mit den 3.0V scheint mir jetzt auch sinnvoll.

Zitat von: ext23 am 19 Februar 2019, 11:19:39
Nimmst halt etwas mehr, also 3,4V und 2,6V.

Die 3.4 Volt muss man ja erstmal messen!
Mein Verständnis:

Bei Referenz = 3.3V und Spannung >= 3.3V ergibt:
Interene Messung = 3.3V
BatterySensorUni = 3.3V
BatterySensorExt = 3.3V

Der max. Wert an einem Analogping entspricht einer angelegten Spannung, die gleich oder größer der Referenzspannung ist.
Ich kann da also keine Werte messen, die höher als die Referenz sind.

Mein ursprünglicher Hintergrund bezog sich auf die hier dargestellten Daten:
https://www.powerstream.com/lithium-ion-charge-voltage.htm

Allerdings habe ich dabei den Strom (100 mA) nicht näher betrachtet.
Deshalb habe ich mir die Frage gestellt, wie ich es so hinbekomme, dass eine Spannung von 4.1V (max bei 18650) z.B. als 3.2V gemessen wird und welchen Batt-Low Wert ich dann im Sketch einstellen muss, damit bei 3.6V (tatsächlicher Spannung) eine Warnung kommt. Vermutlich wird das bei einem Spannungsteiler aber sowieso linear sein.




ext23

Zitat von: micky0867 am 19 Februar 2019, 19:42:41
Der max. Wert an einem Analogping entspricht einer angelegten Spannung, die gleich oder größer der Referenzspannung ist.
Ich kann da also keine Werte messen, die höher als die Referenz sind.

Die Aussage ist Quatsch, weil die Lösung heißt unbelasteter Spannungsteiler, sonst würde ja vieles nicht funktionieren ;-)

https://www.mikrocontroller.net/articles/Spannungsteiler

Also das sollte kein Problem sein. Mach ich ja bei mir nicht anders, ich habe ja zwei Zellen in Reihe. Da messe ich auch die Gesamtspannung. Natürlich musst du das unter FHEM dann wieder anpassen wenn du nicht den Sketch ändern möchtest. Also wenn der Sketch dann 3V misst ist es ja in Wirklichkeit mehr, ab er das kann man ja mit demselben Teilungsfaktor wieder hochrechnen.

HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

gloob

Hallo,

Hat jemand eine Idee, warum ich den Sensor nicht pairen kann mit FHEM?


20:55:53.800 -> AskSin++ V3.1.7 (Feb 19 2019 20:52:57)
20:55:53.800 -> Address Space: 32 - 90
20:55:53.800 -> CC init1
20:55:53.800 -> CC Version: 14
20:55:53.836 ->  - ready
20:55:54.177 -> Bat: 33
20:55:54.177 -> *List1 changed
20:55:54.177 -> *ledOntime 0
20:55:54.177 -> *transmitTryMax 0
20:55:54.177 -> *waterUpperThreshold 0
20:55:54.177 -> *waterLowerThreshold 0
20:55:54.177 -> *caseDesign 0
20:55:54.177 -> *caseHigh 0
20:55:54.177 -> *caseWidth 100
20:55:54.214 -> *caseLength 100
20:55:54.214 -> *measureLength 0
20:55:54.214 -> *fillLevel 0
20:55:54.214 -> *useCustomCalibration 0
20:56:08.354 ->  debounce
20:56:08.422 ->  pressed
20:56:08.494 ->  released
20:56:08.532 ->
20:56:11.669 -> ignore 14 10 00 8E B5453F 96E6C1 0C 62 B1 E7 78 77 E6 A1 22 CB C9  - 3590
20:56:16.437 -> ignore 14 C7 84 5E 24B05C 000000 80 12 4B 00 00 81 00 0C 09 08 FE  - 8366
20:56:16.608 -> ignore 27 10 00 8E 3C22EC BF992C 00 00 33 E8 76 3D 45 49 CF C9 79 EA CD 77 2A FF 63 64 15 26 4D E9 AC EB B2 BB 50 F7 DD B0  - 8527
20:56:19.711 -> ignore 14 76 84 5E 3272FA 000000 80 85 BA 00 00 AE 00 0C 09 06 FE  - 11616
20:56:19.811 -> ignore 27 10 00 8E 24448E B5453F 00 03 15 0F 21 E9 A2 DE 18 13 B2 5E 42 44 01 08 72 3D A7 42 D4 01 6C 54 71 7D 23 70 40 7C  - 11737
20:56:19.911 -> ignore 14 10 00 8E B5453F 24448E 0C 62 B1 E8 1A 4C 2D B6 89 BF C1  - 11841
20:56:21.474 -> ignore 13 12 00 83 2200EE F00001 00 00 06 05 60 E2 79 63 97 17  - 13373
20:56:24.115 -> ignore 0F 39 86 10 42D73C 000000 0A 60 B7 0C 00 00  - 16027


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

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

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
#include <Register.h>

#include <MultiChannelDevice.h>

// 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

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

//seconds between sending messages
#define MSG_INTERVAL 400

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

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0x00, 0x9f, 0x01},     // Device ID
  "JPWAOD0001",           // Device Serial
  {0x00, 0x9f},           // Device Model
  0x10,                   // Firmware Version
  as::DeviceType::THSensor, // Device Type
  {0x01, 0x00}            // Info Bytes
};

/**
   Configure the used hardware
*/
typedef AvrSPI<10, 11, 12, 13> SPIType;
typedef Radio<SPIType, 2> RadioType;
typedef StatusLed<LED_PIN> LedType;
typedef AskSin<LedType, BatterySensor, RadioType> BaseHal;
class Hal : public BaseHal {
  public:
    void init (const HMID& id) {
      BaseHal::init(id);
      // measure battery every 1h
      battery.init(seconds2ticks(60UL * 60), sysclock);
      battery.low(22);
      battery.critical(19);
    }

    bool runready () {
      return sysclock.runready() || BaseHal::runready();
    }
} hal;

DEFREGISTER(WaOdReg0, MASTERID_REGS, DREG_CYCLICINFOMSGDIS, DREG_LOCALRESETDISABLE, DREG_TRANSMITTRYMAX)
class WaOdList0 : public RegList0<WaOdReg0> {
  public:
    WaOdList0 (uint16_t addr) : RegList0<WaOdReg0>(addr) {}
    void defaults () {
      clear();
      // cyclicInfoMsgDis(0);
      // transmitDevTryMax(6);
      // localResetDisable(false);
    }
};

DEFREGISTER(WaOdReg1, CREG_WATER_UPPER_THRESHOLD_CH, CREG_WATER_LOWER_THRESHOLD_CH, CREG_CASE_DESIGN, CREG_CASE_HIGH, CREG_FILL_LEVEL, CREG_CASE_WIDTH, CREG_CASE_LENGTH, CREG_MEASURE_LENGTH, CREG_USE_CUSTOM_CALIBRATION, CREG_LEDONTIME, CREG_TRANSMITTRYMAX)
class WaOdList1 : public RegList1<WaOdReg1> {
  public:
    WaOdList1 (uint16_t addr) : RegList1<WaOdReg1>(addr) {}
    void defaults () {
      clear();
      caseLength(100);
      caseWidth(100);
    }
};

class FillingEventMsg : public Message {
  public:
    void init(uint8_t msgcnt, uint8_t fill) {
      Message::init(0xc, msgcnt, 0x41, BIDI, 0x01, msgcnt);
      pload[0] = fill;
    }
};

class FillingChannel : public Channel<Hal, WaOdList1, EmptyList, List4, PEERS_PER_CHANNEL, WaOdList0>, public Alarm {

    FillingEventMsg msg;
    int16_t         fill;
    uint16_t        millis;
    uint8_t last_flags = 0xff;

  public:
    FillingChannel () : Channel(), Alarm(5), fill(0), millis(0) {}
    virtual ~FillingChannel () {}

    // here we do the measurement
    void measure () {
      fill = 170;
    }

    virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
      uint8_t msgcnt = device().nextcount();
      // reactivate for next measure
      tick = delay();
      clock.add(*this);

      if (last_flags != flags()) {
        this->changed(true);
        last_flags = flags();
      }

      measure();

      msg.init(msgcnt, fill);
      device().sendPeerEvent(msg, *this);
    }

    uint32_t delay () {
      return seconds2ticks(MSG_INTERVAL);
    }
    void setup(Device<Hal, WaOdList0>* dev, uint8_t number, uint16_t addr) {
      Channel::setup(dev, number, addr);
      sysclock.add(*this);
    }


    uint8_t status () const {
      return fill;
    }

    void configChanged() {
      DPRINTLN(F("*List1 changed"));
      DPRINT(F("*ledOntime ")); DDECLN(this->getList1().ledOntime());
      DPRINT(F("*transmitTryMax ")); DDECLN(this->getList1().transmitTryMax());
      DPRINT(F("*waterUpperThreshold ")); DDECLN(this->getList1().waterUpperThreshold());
      DPRINT(F("*waterLowerThreshold ")); DDECLN(this->getList1().waterLowerThreshold());
      DPRINT(F("*caseDesign ")); DDECLN(this->getList1().caseDesign());
      DPRINT(F("*caseHigh ")); DDECLN(this->getList1().caseHigh());
      DPRINT(F("*caseWidth ")); DDECLN(this->getList1().caseWidth());
      DPRINT(F("*caseLength ")); DDECLN(this->getList1().caseLength());
      DPRINT(F("*measureLength ")); DDECLN(this->getList1().measureLength());
      DPRINT(F("*fillLevel ")); DDECLN(this->getList1().fillLevel());
      DPRINT(F("*useCustomCalibration ")); DDECLN(this->getList1().useCustomCalibration());
    }

    uint8_t flags () const {
      uint8_t flags = this->device().battery().low() ? 0x80 : 0x00;
      return flags;
    }
};

typedef MultiChannelDevice<Hal, FillingChannel, 1, WaOdList0> WaOdType;
WaOdType sdev(devinfo, 0x20);

ConfigButton<WaOdType> cfgBtn(sdev);

void setup () {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  sdev.initDone();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
    hal.activity.savePower<Sleep<>>(hal);
  }
}


Der Code ist unverändert von hier: https://github.com/jp112sdl/Beispiel_AskSinPP/tree/master/examples/HM-Sen-WA-OD
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

papa

Das sieht schon komisch aus. Nach dem Drücken des Tasters (also nach release) müsste eigentlich eine DeviceInfo-Message zu sehen sein. Diese startet den Pairing-Vorgang. In den Ausgaben ist aber kein Senden zu erkennen. Scheinbar wird nur empfangen. Muss mir den Sketch mal auf ein Testsystem spielen. So habe ich auch keine Erklärung.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

papa

Das Problem ist folgende Zeile:
// transmitDevTryMax(6);

Damit wird TransmitTryMax auf 0 initialisiert und es wird nie eine Nachrricht gesendet. Einfach den Kommentar vor dieser Zeile entfernen und das Geräte RESETen. Dannach sollte es wie erwartet funktionieren.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

gloob

Vielen Dank ich werde es mal damit probieren.
Hast du eine Idee, warum die meisten Sensoren trotzdem funktionieren, obwohl die Zeile überhaupt nicht vorhanden ist?
Ich würde gerne den Hintergrund/Sinn erkennen.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

papa

Wenn das Register nicht vorhanden ist, dann ist der Wert automatisch 6 (Register.h Zeile 360). Aber wenn das Register angelegt ist, muss es auch ordentlich initialisiert werden.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

gloob

Zitat von: papa am 21 Februar 2019, 08:08:29
Wenn das Register nicht vorhanden ist, dann ist der Wert automatisch 6 (Register.h Zeile 360). Aber wenn das Register angelegt ist, muss es auch ordentlich initialisiert werden.

Okay das macht dann natürlich auch Sinn. Vielen Dank. Hätte nicht gedacht, dass das den kompletten Anlernvorgang lahm legt.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

papa

Zitat von: gloob am 21 Februar 2019, 08:18:29
Okay das macht dann natürlich auch Sinn. Vielen Dank. Hätte nicht gedacht, dass das den kompletten Anlernvorgang lahm legt.
Wenn er halt keine Nachrichten mehr sendet - geht natürlich gar nichts mehr.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

gloob

Ich werde es heute Nachmittag  testen und dann Jerome informieren, dass seine Sample auf der Github Seite nicht laufen.  ;)
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

gloob

Zitat von: papa am 20 Februar 2019, 20:34:25
Das Problem ist folgende Zeile:
// transmitDevTryMax(6);

Damit wird TransmitTryMax auf 0 initialisiert und es wird nie eine Nachrricht gesendet. Einfach den Kommentar vor dieser Zeile entfernen und das Geräte RESETen. Dannach sollte es wie erwartet funktionieren.

Vielen Dank. Jetzt geht der Sensor und wird in FHEM als HM-SEN-WA-OD erkannt  ;D
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

The-Holgi

#1211
Hallo,
habe folgenden Wandsender nachgebaut:
https://github.com/ronnythomas/Wandsender
Soweit funktioniert auch alles, allerdings wird Taste 3 im webinterface nach betätigung nicht als btn3 angezeigt, sondern nur cmd's done. Taste 1 und 2 funktionieren.
Internals:
   CFGFN     
   DEF        02BF02
   FUUID      5c7143c4-f33f-6571-935d-98347cdbebf51713
   HMLAN1_MSGCNT 269
   HMLAN1_RAWMSG E02BF02,0000,2F562563,FF,FFC9,C6A24002BF0229A0F10318
   HMLAN1_RSSI -55
   HMLAN1_TIME 2019-02-23 16:02:09
   IODev      HMLAN1
   LASTInputDev HMLAN1
   MSGCNT     269
   NAME       HM_02BF02
   NOTIFYDEV  global
   NR         522
   STATE      CMDs_done
   TYPE       CUL_HM
   channel_01 HM_02BF02_Btn_01
   channel_02 HM_02BF02_Btn_02
   lastMsg    No:C6 - t:40 s:02BF02 d:29A0F1 0318
   protLastRcv 2019-02-23 16:02:09
   protRcv    269 last_at:2019-02-23 16:02:09
   protResnd  1 last_at:2019-02-23 15:45:03
   protSnd    184 last_at:2019-02-23 16:02:09
   protState  CMDs_done
   rssi_at_HMLAN1 cnt:269 min:-81 max:-55 avg:-64.56 lst:-55
   READINGS:
     2019-02-23 15:18:45   CommandAccepted yes
     2019-02-23 16:00:22   D-firmware      1.4
     2019-02-23 16:00:22   D-serialNr      HOLB2FM001
     2019-02-23 16:00:23   PairedTo        0x29A0F1
     2019-02-23 15:19:15   R-pairCentral   0x29A0F1
     2019-02-23 16:00:22   RegL_00.         00:00 02:01 0A:29 0B:A0 0C:F1
     2019-02-23 16:02:09   battery         ok
     2019-02-23 16:02:09   state           CMDs_done
     2019-02-23 15:18:34   trigDst_broadcast noConfig
     2019-02-23 16:02:09   trigger         Short_24
     2019-02-23 16:02:09   trigger_cnt     24
   helper:
     BNO        24
     BNOCNT     1
     HM_CMDNR   198
     PONtest    1
     cSnd       0129A0F102BF0202040000000001,0129A0F102BF020203
     mId        00BF
     regLst     ,0
     rxType     20
     supp_Pair_Rep 0
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     io:
       newChn     +02BF02,00,01,00
       nextSend   1550934129.99849
       prefIO     
       rxt        2
       vccu       
       p:
         02BF02
         00
         01
         00
     mRssi:
       mNo        C6
       io:
         HMLAN1:
           -49
           -49
     prt:
       bErr       0
       sProc      0
       rspWait:
     q:
       qReqConf   
       qReqStat   
     regCollect:
     role:
       dev        1
     rpt:
       IO         HMLAN1
       flg        A
       ts         1550934129.91028
       ack:
         HASH(0x56377ae794c0)
         C6800229A0F102BF0200
     rssi:
       at_HMLAN1:
         avg        -64.5650557620817
         cnt        269
         lst        -55
         max        -55
         min        -81
     shadowReg:
     tmpl:
Attributes:
   IODev      HMLAN1
   IOgrp      vccu:HMLAN1
   autoReadReg 4_reqStatus
   expert     2_raw
   firmware   1.4
   model      HM-PB-2-FM
   room       CUL_HM
   serialNr   HOLB2FM001
   subType    pushButton
   webCmd     getConfig:clear msgEvents

Denke es liegt daran, das er als HM-PB-2-FM erkannt wird. Ist vielleicht nicht in der HMConfig_AskSinPPCustom.pm angelegt ?
Im eventmonitor kommt zumindest was von Btn3 an.
Was kann ich tun ?

Gruß Holger
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

papa

Da Ronny leider seine Sachen nicht frei zur Verfügung stellt, kann und will ich nicht für ihn Support machen. Bitte wende Dich direkt an Ronny.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

The-Holgi

Ok,
dafür habe ich natürlich Verständnis.

Gruß Holger
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

fhemfreund

Zitat von: Tom Major am 25 Januar 2019, 18:58:16
ok, PR für den Fix des RTC sleep modes wurde gemacht und von papa gemerged.
Jetzt ist im RTC mode ca. 1uA Ruhestrom erreichbar (ohne Sensoren).

@papa,

bin ja gerade dran, mit Tom eine optimierte Version seines UniSensors fertig zu stellen - sind schon gut voran gekommen. Was uns bei dem verwendeten PIR aufgefallen ist, dass er alle 2 sek. bei einer einer Motion Detection eine Zustandsänderung auslöst. Dies erzeugt eine hohe Anzahl von Sendezyklen, die wir gerne vermeiden möchten (zum Strom sparen).

Frage daher: gibt es die Möglichkeit eine Art Totzeit zu realisieren, in der *keine* Transmits stattfinden, egal ob ein Interrupt (durch den PIR) getriggert wird?

Andreas