AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

Franki

Hi,

danke Euch allen für Eure Antworten.
Werde es mit einem (oder zwei für Wind und Regenmenge) hardwarecountern versuchen. Der PCF8583 kann als Eventconter bis 1000000 verwendet werden (sollte reichen  ;D).
Das Auslesen geht einfach über das I2C Interface, verhält sich also wie ein Sensor.
Vom Gesamtstromverbrauch sollte die Lösung mit einem externen Counter sogar besser sein da der 328 im sleep modus bleiben kann (ich habe jetzt nicht im Datenblatt nachgeschaut ob das wirklich der fall ist).
Der Preis (zumindest for die SO Variante) ist auch OK (siehe Reichelt).

LG
Frank

Frank

Franki

Hi,

Ich habe eine Frage zum MOD–EM–8bit, gibt es eine Möglickeit anstelle 8 Tasten abzufragen einen Wert der in einem Datenfeld abgespeichert ist zu übertragen?
Applikation: Taste drücken, dann wird RFID Tag ausgelesen und je nach ID ein unterschiedlicher Wert an die CCU übertragen (ca. 10 Werte sollten ausreichen). Die weitere Verarbeitung findet in der CCU statt.

LG

Franki

Tom Major

Zitat von: Franki am 27 Mai 2018, 13:49:10
Hi,

Ich habe eine Frage zum MOD–EM–8bit, gibt es eine Möglickeit anstelle 8 Tasten abzufragen einen Wert der in einem Datenfeld abgespeichert ist zu übertragen?
Applikation: Taste drücken, dann wird RFID Tag ausgelesen und je nach ID ein unterschiedlicher Wert an die CCU übertragen (ca. 10 Werte sollten ausreichen). Die weitere Verarbeitung findet in der CCU statt.
LG
Franki

Auf welchen AskSin++ example sketch für MOD–EM–8bit bezieht sich die Frage?
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

Franki

Hallo Tom,

ich beziehe mich auf _wip_HM-MOD-EM8 und _wip_HM-MOD-EM8bit, ich fürchte aber dass sich beide sich auf die ältere Version des ELV Senders beziehen (ohne Datenübertragung) da beide keinen 3. Kanal implementiert haben.
Generell würde es mir sehr weiterhelfen die Struktur der Programme zu verstehen, zB. was wird initialisiert, wie und wo in der Software erfolgt die Erkennung eines Tastendrucks, wo in der Software erfolgt die Übertragung......

LG

Franki

papa

Zitat von: Franki am 29 Mai 2018, 11:32:19
ich beziehe mich auf _wip_HM-MOD-EM8 und _wip_HM-MOD-EM8bit,

???? Wo / was ist das ????
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

jp112sdl

Zitat von: Franki am 29 Mai 2018, 11:32:19
ich beziehe mich auf _wip_HM-MOD-EM8 und _wip_HM-MOD-EM8bit, ich fürchte aber dass sich beide sich auf die ältere Version des ELV Senders beziehen (ohne Datenübertragung) da beide keinen 3. Kanal implementiert haben.
Generell würde es mir sehr weiterhelfen die Struktur der Programme zu verstehen, zB. was wird initialisiert, wie und wo in der Software erfolgt die Erkennung eines Tastendrucks, wo in der Software erfolgt die Übertragung......

LG

Franki

Was meinst du mit 3. Kanal?
Der ...-EM8bit hat den 3.Kanal implementiert auf dem die 8 Zustände übertagen werden.
Beim EM8 werden die Zustände der einzelnen Kontakte als einzelne Kanäle aus der sysinfo (count_from_sysinfo="23.0:1.0") genommen.


Franki

Hi,

ZitatWas meinst du mit 3. Kanal?
Der ...-EM8bit hat den 3.Kanal implementiert auf dem die 8 Zustände übertagen werden.
Beim EM8 werden die Zustände der einzelnen Kontakte als einzelne Kanäle aus der sysinfo (count_from_sysinfo="23.0:1.0") genommen.

Beim EM8 gibt es Übertragungsmodi bei denen ein Änderung an einem Taster (DUI30) die 8 bit Übertragung trigger, dh. alle 8 bit liegen an den entsprechenden Eingängen an und die Übertragung wird erst gestartet wenn DU30 zB. von high auf low geht.
Ich vermisse die Anschußmöglichkeit für einen 3. Taster.

LG

Franki

jp112sdl

Ach so. Ja, ist noch im Status "wip" = work in progress
Vielleicht macht ein anderer den Sketch fertig und dann einen PullRequest. 8) :)
Ich komme momentan nicht dazu, daran weiterzuarbeiten.
Hatte den Sketch auch nur schnell zusammengeschustert, weil ich testen wollte, ob man beim EM8bit der CCU noch mehrere 8bit-Kanäle einem Device unterschustern kann.
Geht an sich sogar, aber die Ampel-Anzeige in der WebUI zeigt nur den ersten 8bit-Kanal an.

Funsailor

Hallo Papa,
ich habe mal das Beispiel
V3\examples\stm32\HM-LC-SWX-SM\HM-LC-SWX-SM.ino
compiliert.
Dabei bekomme ich immer die Fehlermeldung das
ZitatHM-LC-SWX-SM.ino:22:23: error: 'at24cX' was not declared in this scope

Das liegt daran, das die Klasse at24cX in der storage.h definiert ist, diese Datei aber erst ein paar Zeilen weiter unten eingebunden wird.


#define STORAGEDRIVER at24cX<0x50,128,32>

#include <SPI.h>    // when we include SPI.h - we can use LibSPI class
#include <Wire.h>
#include <EEPROM.h> // the EEPROM library contains Flash Access Methods
#include <AskSinPP.h>

#include <MultiChannelDevice.h>
#include <Switch.h>


ändern in



#include <SPI.h>    // when we include SPI.h - we can use LibSPI class
#include <Wire.h>
#include <EEPROM.h> // the EEPROM library contains Flash Access Methods
#include <AskSinPP.h>

#include <MultiChannelDevice.h>
#include <Switch.h>

#define STORAGEDRIVER at24cX<0x50,128,32>



und das Beispiel wird fehlerlos kompiliert.

Mal sehen, wann ich dazu komme, das auf einem STM32F103 Board zu testen.
Bei der 48er Variante des F103 liegt SCL an PB6 und SDA an PB7.
Aber wo finde ich die PIN Definitio für das EEProm?
LG
Funsailor
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

papa

#850
Zitat von: Funsailor am 30 Mai 2018, 14:14:27
Hallo Papa,
ich habe mal das Beispiel
V3\examples\stm32\HM-LC-SWX-SM\HM-LC-SWX-SM.ino
compiliert.
Dabei bekomme ich immer die Fehlermeldung das
Das liegt daran, das die Klasse at24cX in der storage.h definiert ist, diese Datei aber erst ein paar Zeilen weiter unten eingebunden wird.

Schau mal in die Wire.h bzw. WireBase.h was da für ein Define drin ist und check das mal gegen die ifdef Liste im Storage.h. Vielleicht ist das eine andere Version.

STORAGEDRIVER muss unbedingt vor den Includes definiert werden, da es bei der Template-Instanziierung vorhanden sein muss. Sonst wird automatisch auf die Flash-Default-Implementierung zurück geschalten.
Wegen den Pins könnte ich ja jetzt "Search Goo..." sagen - aber hier der direkte Link.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Tom Major

Zitat von: Franki am 29 Mai 2018, 11:32:19
Hallo Tom,

ich beziehe mich auf _wip_HM-MOD-EM8 und _wip_HM-MOD-EM8bit, ich fürchte aber dass sich beide sich auf die ältere Version des ELV Senders beziehen (ohne Datenübertragung) da beide keinen 3. Kanal implementiert haben.
Generell würde es mir sehr weiterhelfen die Struktur der Programme zu verstehen, zB. was wird initialisiert, wie und wo in der Software erfolgt die Erkennung eines Tastendrucks, wo in der Software erfolgt die Übertragung......

LG

Franki

Hm, jp112sdl schreibt ja das der sketch noch work in progress ist.

Weiss nicht genau was du vorhast, ob dir z.B. für das RFID Übertragen auf Tastendruck ein 'custom' HM device (mit eigener xml) reichen würde?
Falls ja würde ich z.B. den HM-RC-P1 sketch nehmen, versuchen (ggf. mit papas Hilfe) das zusätzliche RFID Byte an die message anzuhängen oder über einen zweitem Kanal zu senden und das xml für die CCU entsprechend anzupassen.

Wenn du allerdings genau das original HM-MOD-EM8bit device in der CCU brauchst würde ich mit jp112sdl sketch weitermachen..
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

ext23

#852
Gibt es eigentlich mittlerweile schon eine Dokumentation. Ich hab mich jetzt mal an den generischen Sensor versucht um dort mein Wasseruhr Dual Zähler einzubauen aber ich sehe bei dem Code wirklich null durch. Dieser ganze public und class misst... Ich raff es nicht, das ist mir alles zu unübersichtlich. Ich hab die Objektorientierung schon im Studium nicht verstanden, ist irgendwie nicht besser geworden ;-)

Ich möchte doch nur das dieser Code ca. alle halbe Sekunde ausgeführt wird für zwei Sensoren und dann nach 3 Minuten beide Zählerstände übermittelt werden.

pinMode(senspin,INPUT);
pinMode(irpin,OUTPUT);

// read on value
digitalWrite(irpin,HIGH);
_delay_ms(10);
uint16_t valon = analogRead(senspin);
// read off value
digitalWrite(irpin,LOW);
_delay_ms(10);
uint16_t valoff = analogRead(senspin);


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

papa

Zitat von: ext23 am 01 Juni 2018, 14:30:43
Gibt es eigentlich mittlerweile schon eine Dokumentation. Ich hab mich jetzt mal an den generischen Sensor versucht um dort mein Wasseruhr Dual Zähler einzubauen aber ich sehe bei dem Code wirklich null durch. Dieser ganze public und class misst... Ich raff es nicht, das ist mir alles zu unübersichtlich. Ich hab die Objektorientierung schon im Studium nicht verstanden, ist irgendwie nicht besser geworden ;-)
Also ohne C++ Kenntnisse wird es auch mit Doku schwer.
Zitat von: ext23 am 01 Juni 2018, 14:30:43
Ich möchte doch nur das dieser Code ca. alle halbe Sekunde ausgeführt wird für zwei Sensoren und dann nach 3 Minuten beide Zählerstände übermittelt werden.
Hier mal schnell der Code für das Senden von 2 Countern. Diese werden im Code nur hochgezählt. Da musst Du noch Deinen Code einbauen. Je nachdem wie Du es haben willst, müssen die Counter auch noch nach dem Senden genullt werden. Also ich finde das total übersichtlich und leicht verständlich  ;)
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2018-04-22 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 <Device.h>
#include <MultiChannelDevice.h>

// use builtin led
#define LED_PIN 4
// Arduino pin for the config button
// use button on maple mini board
#define CONFIG_BUTTON_PIN 8


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

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
    {0xfa,0x32,0x71},       // Device ID
    "papafa3271",           // Device Serial
    {0xf2,0x05},            // Device Model
    0x01,                   // Firmware Version
  as::DeviceType::Sensor, // Device Type
    {0x00,0x00}             // Info Bytes
};

/**
* Configure the used hardware
*/
typedef AvrSPI<10,11,12,13> RadioSPI;
typedef AskSin<StatusLed<4>,BatterySensor,Radio<RadioSPI,2> > Hal;

DEFREGISTER(SensReg0,MASTERID_REGS)
class SensList0 : public RegList0<SensReg0> {
public:
  SensList0 (uint16_t addr) : RegList0<SensReg0>(addr) {}
};

DEFREGISTER(ValuesReg1,CREG_AES_ACTIVE)
class ValuesList1 : public RegList1<ValuesReg1> {
public:
  ValuesList1 (uint16_t addr) : RegList1<ValuesReg1>(addr) {}
};

class ValuesChannel : public Channel<Hal,ValuesList1,EmptyList,EmptyList,0,SensList0>, Alarm {

uint32_t count1, count2;

public:
  typedef Channel<Hal,ValuesList1,EmptyList,EmptyList,0,SensList0> BaseChannel;

  ValuesChannel () : BaseChannel(), Alarm(0), count1(0), count2(0) {}
  virtual ~ValuesChannel () {}

  virtual void trigger (AlarmClock& clock) {
    ValuesMsg& msg = device().message().values();
    msg.init(device().nextcount(),number());
    msg.add(count1);
    msg.add(count2);
    device().send(msg, device().getMasterID());

    set(seconds2ticks(3*60));
    clock.add(*this);
  }

  void setup(Device<Hal,SensList0>* dev,uint8_t number,uint16_t addr) {
    BaseChannel::setup(dev, number, addr);
    set(seconds2ticks(5));
    sysclock.add(*this);
  }

  uint8_t status () const { return 0; }
  uint8_t flags () const { return 0; }

  void raiseCounter1() { ++count1; }
  void raiseCounter2() { ++count2; }
  uint32_t getCounter1 () const { return count1; }
  uint32_t getCounter2 () const { return count2; }
  void setCounter1 (uint32_t value) { count1=value; }
  void setCounter2 (uint32_t value) { count2=value; }

};

class SensType : public MultiChannelDevice<Hal,ValuesChannel,1,SensList0> {
public:
  typedef MultiChannelDevice<Hal,ValuesChannel,1,SensList0> DevType;
  SensType (const DeviceInfo& i,uint16_t addr) : DevType(i,addr) {}
  virtual ~SensType () {}
};

Hal hal;
SensType sdev(devinfo,0x20);
ConfigButton<SensType> cfgBtn(sdev);

class CyclicMeasure : public Alarm {
public:
  CyclicMeasure () : Alarm(millis2ticks(500)) {}
  virtual ~CyclicMeasure () {}

  virtual void trigger (AlarmClock& clock) {
    set(millis2ticks(500));
    clock.add(*this);
    // add your own measure code here
    sdev.channel(1).raiseCounter1();
    if( (sdev.channel(1).getCounter1() % 1) == 0 ) {
      sdev.channel(1).raiseCounter2();
    }
  }
} measure;

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

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if( worked == false && poll == false ) {
    hal.activity.savePower<Sleep<>>(hal);
  }
}
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

ext23

#854
Schau ich mir mal an.

Naja diese ganzen Funktionen oder Methoden oder wie man das nennt, das wäre schon gut wenn das erklärt ist. Das hilft ungemein. HAL, ValuesList1, BaseChannel .... ich werd wahnsinnig ;-) Was ist ANSI C nicht einfach ^^

Aber ich glaube ein großes Problem ist hier auch die arduino IDE, die macht es ja ziemlich unmöglich mit Bibliotheken zuarbeiten da man nicht in den Code springen kann... aber gut das ist ein IDE Problem, kein Code Problem ;-)

Übrigens warum wird die Status LED unten fixed auf PIN 4 konfiguriert und oben gibt es aber ein define was vermutlich ignoriert wird?!?

UPDATE: Tatsache, jetzt funktioniert es... Jetzt schau ich mir mal das Modul auf FHEM Seite an. Wegen dem löschen der Counter, tja mhh Glaubensfrage... Ich lass die lieber hochzählen. Verliert man Nachrichten bzw. beim Stromausfall ist das etwas leichter zu erkennen glaube ich.

Gibt es eigentlich noch eine fertige Funktion die Status LED einmal blinken zu lassen?

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