AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

Klaus0815

ZitatNur die Original-Nachbauten. Für die HB-Geräte wird eine angepasste HM-Config benötigt.

Habe gesehen, TomMajor hat da was veröffentlicht, aber ist das dann auch der Richtige?
https://github.com/TomMajor/AskSinPP_Examples/tree/master/HB-UNI-Sensor1/FHEM

Oder nur zufällig der gleiche Name?

ext23

#1051
Zitat von: papa am 12 Oktober 2018, 20:53:18
Der HM-IBUT-8 kann jetzt auch den ThreeStateMode. Dazu muss im Device das Regsiter buttonMode auf state gestet werden. Default ist remote.
set DEVICE buttonMode state
Der Rest bleibt so wie zuvor.

Super, probiere ich jetzt aus, hab ein PanStamp genommen und check das mal.

Ich mag ja diese Arduino IDE nicht so, aber wie kann man denn die Lib in dem Ordner speichern wo die INO liegt? Da die AskSin lib doch sehr dynamisch ist, ist es besser die dort zu lagen wo auch das Projekt ist, wenn man das später nochmal kompilieren möchte. Mache ich ein include mit vollem Pfad findet der einiges aus der lib nicht.

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

ext23

Also das funktioniert in der Tat gut!

Aber zwei Probleme habe ich noch, ich bekomme den buttonMode nicht geändert, der steht noch auf undef und dann darf der natürlich nicht dauerhaft senden wenn der iButton dran hängt, das macht er jetzt aber, liegt aber vielleicht am falschen mode. Ich spiele mal noch nen bissel rum.

Wirklich gut, aber ich glaube ich muss dann echt mal einen eigenen HM Key einstellen, sonst wird mir das alles ein bissel heiß, das möchte schon wenigstens signiert sein dann.
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

ext23

#1053
Genau es lag am mode! Er zeigt zwar immer noch undef an, egal wie oft ich ein getconfig mache aber jetzt funktioniert es.

Gut, dass ich mich mit panstamps eingedeckt habe damals. Die alten gibt es ja nicht mehr, aber die sind für die HM Sachen echt gut.

Ich hab noch einen kleinen Verbesserungsvorschlag. Es passiert manchmal, das alle in absent gehen wenn man ein neuen steckt. Ist eben ein Bus, und die Dinger sind alle parasitär versorgt. Kann man das noch irgendwie abfangen? Vielleicht doppelt abfragen ob der wirklich weg ist wenn wenn einer verschwindet?

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

Tom Major

Zitat von: Klaus0815 am 12 Oktober 2018, 21:03:20
Habe gesehen, TomMajor hat da was veröffentlicht, aber ist das dann auch der Richtige?
https://github.com/TomMajor/AskSinPP_Examples/tree/master/HB-UNI-Sensor1/FHEM
Oder nur zufällig der gleiche Name?
Das Richtige für was genau?
Die verlinkte Datei ist die FHEM Configuration für meine Variante HB-UNI-Sensor1 von papas generischem Sensor (mit etwas Erklärung und Optionen für diverse Sensoren).
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

Klaus0815

ZitatDas Richtige für was genau?

Hallo Tom,

ich meinte diese Beispiele hier:

https://github.com/jp112sdl/Beispiel_AskSinPP/tree/master/examples

Dort v.a. die verschiedenen HB-UNI-Sen....

Tom Major

Zitat von: Klaus0815 am 13 Oktober 2018, 11:01:01
Hallo Tom,

ich meinte diese Beispiele hier:

https://github.com/jp112sdl/Beispiel_AskSinPP/tree/master/examples

Dort v.a. die verschiedenen HB-UNI-Sen....

Soviel ich weiß ist jp112sdl ist eher auf CCU/RaspberryMatic Seite und nicht auf FHEM unterwegs.
Für jeden 'custom' Sensor mit spezifischem Messdaten und Payload braucht man ein angepasstes Perl script um das korrekt in FHEM reinzubekommen.

Das hier
https://github.com/TomMajor/AskSinPP_Examples/tree/master/HB-UNI-Sensor1/FHEM
passt halt genau für die Payload in meiner HB-UNI-Sensor1 Variante.
Mit Perl Kenntnissen kann man das an Eigenentwicklungen mit anderer Payload anpassen.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Zitat von: ext23 am 12 Oktober 2018, 23:06:54
Genau es lag am mode! Er zeigt zwar immer noch undef an, egal wie oft ich ein getconfig mache aber jetzt funktioniert es.

Gut, dass ich mich mit panstamps eingedeckt habe damals. Die alten gibt es ja nicht mehr, aber die sind für die HM Sachen echt gut.

Ich hab noch einen kleinen Verbesserungsvorschlag. Es passiert manchmal, das alle in absent gehen wenn man ein neuen steckt. Ist eben ein Bus, und die Dinger sind alle parasitär versorgt. Kann man das noch irgendwie abfangen? Vielleicht doppelt abfragen ob der wirklich weg ist wenn wenn einer verschwindet?
Ja - das mit den Resgistern im Device geht irgendwie noch nicht richtig in FHEM. Muss ich mal mit Martin checken, was ich da flasch mache.
Ich habe das State Update nochmal angepasst. Es müsste jetzt besser funktionieren, wenn mal kurz ein Button weg ist.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

ext23

#1058
Super, teste ich gleich! Ansonsten Seriennummern löschen über die Register geht auch sehr gut, manuell anlegen wenn man die Seriennummer kennt checke ich auch nochmal.

Also ich bin wirklich schwer begeistert!

>Ich habe das State Update nochmal angepasst. Es müsste jetzt besser funktionieren, wenn mal kurz ein Button weg ist.
Ist das schon auf github?

/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

BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

ext23

Sieht besser aus!

Ich bau das jetzt mal in mein Schlüsselkasten ein und dann schau ich mal. Muss mir nur mal eben ne kleine Platine ätzen.

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

neumann

Zitat von: papa am 02 Oktober 2018, 22:17:25
Ja - man könnte ein Regsiter definieren, aber das wird dann immer in den Flash geschrieben. Das macht der Chip dann nicht ewig mit.
Besser wäre, eine Action zu definieren. Mal aus

$HMConfig::culHmSubTypeSets{"Values"} = { };

folgendes machen

$HMConfig::culHmSubTypeSets{"Values"} = { pct =>"[-value-] ... [-ontime-] [-ramptime-]" };

Dann müsste es möglich sein, wie beim Dimmer, ein Byte und 2 2-Byte-Werte zu übertragen. Leider wird FHEM allerdings die 2-Byte-Werte noch mit CUL_HM_encodeTime16() umrechnen.


Hey!
Ich habe es nun geschafft, einen 32 Bit Wert zu senden und zu empfangen, mit dem unten angeführten Sketch.
Der Befehl, um an das Gateway zu senden ist ein Action Command: ++A011F0F0F0FA327180021234567803
Wie schaffe ich nun, das aus FHEM heraus zu senden mit Fehlererkennung (Ack) (zum testen ging es über set raw bei der VCCU, allerdings ohne Erkennung des zurückkommenden Acks)?
Am besten so einfach wie möglich.

Danke!


// 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<14>,BatterySensor,Radio<RadioSPI,3> > Hal;

DEFREGISTER(SensReg0,MASTERID_REGS,DREG_BURSTRX)
class SensList0 : public RegList0<SensReg0> {
public:
  SensList0 (uint16_t addr) : RegList0<SensReg0>(addr) {}
  void defaults () {
     burstRx(true);
   }
};

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

class BaseChannel : public Channel<Hal,ValuesList1,EmptyList,EmptyList,0,SensList0> {
public:
  virtual bool process (const ActionSetMsg& msg) { return false; }
  virtual bool process (const ActionCommandMsg& msg) { return false; }
  virtual bool process (const RemoteEventMsg& msg) { return false; }
  virtual bool process (const SensorEventMsg& msg) { return false; }
  uint8_t status () const { return 0; }
  uint8_t flags () const { return 0; }
};

class ValuesChannel : public BaseChannel, Alarm {
public:
  ValuesChannel () : BaseChannel(), Alarm(0)
  {}
  virtual ~ValuesChannel () {}

  virtual void trigger (AlarmClock& clock) {

  }

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

class ActionChannel : public BaseChannel {
public:
  ActionChannel () : BaseChannel() {}
  virtual ~ActionChannel () {}

  void setup(Device<Hal,SensList0>* dev,uint8_t number,uint16_t addr) {
    BaseChannel::setup(dev, number, addr);
  }

  virtual bool process (const ActionCommandMsg& msg) override {
    DPRINTLN(F("got 32 bit word!"));
    return true;
  }
};

typedef ChannelDevice<Hal,BaseChannel,2,SensList0> CustomChannelDevice;

class SensType : public CustomChannelDevice {
private:
  ValuesChannel values;
  ActionChannel actions;
public:
  SensType (const DeviceInfo& i,uint16_t addr) : CustomChannelDevice(i, addr) {
    this->registerChannel(values, 1);
    this->registerChannel(actions, 2);
  }
  virtual ~SensType () {}
};

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

void setup () {
  pinMode(5, INPUT);           // set pin to input
  digitalWrite(5, HIGH);

  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);
  }
 
  if(!digitalRead(5)) {
    readFromBus();
  }
}

void readFromBus() {
    ValuesMsg& msg = sdev.message().values();
    msg.init(sdev.nextcount(),1);
    uint32_t value = 0xA1A2A3A4;
    msg.add(value);
    sdev.send(msg, sdev.getMasterID());

    delay(1000);
}
Modulentwickler
- Spotify #72490
- Nello #75127

Klaus0815

ZitatDas hier
https://github.com/TomMajor/AskSinPP_Examples/tree/master/HB-UNI-Sensor1/FHEM
passt halt genau für die Payload in meiner HB-UNI-Sensor1 Variante.
Mit Perl Kenntnissen kann man das an Eigenentwicklungen mit anderer Payload anpassen.

Hallo Tom,

an den Perl Kentnissen scheitert es leider...

Habe jetzt aber trotzdem die meiszen meiner nervigen MySensors-Teile mit Deinem Script ersetzt, läuft bislang sehr gut

Was jetzt noch fehlen würde: EIn "Umwelt"-Sensor, also Temperatur, Luftfeuchte usw, wie in Deinem Beispiel, und zusätzlich ein EIngang für Taster, Bewegungsmelder, der dann sofort auslöst
In der RIchtung hat bislang niemand was gebastelt?

Viele Grüße

Klaus

Tom Major

Zitat von: Klaus0815 am 15 Oktober 2018, 19:16:12
Hallo Tom,
an den Perl Kentnissen scheitert es leider...
Habe jetzt aber trotzdem die meiszen meiner nervigen MySensors-Teile mit Deinem Script ersetzt, läuft bislang sehr gut
Was jetzt noch fehlen würde: EIn "Umwelt"-Sensor, also Temperatur, Luftfeuchte usw, wie in Deinem Beispiel, und zusätzlich ein EIngang für Taster, Bewegungsmelder, der dann sofort auslöst
In der RIchtung hat bislang niemand was gebastelt?
Viele Grüße
Klaus

jp112sdl hat einen Sensor mit Taster in seinen Beispielen, aber wahrsch. ohne FHEM Unterstützung, bin nicht sicher.
Zufällig habe ich gerade den Bedarf, Daten eines extra Schalters/Inputs am Unisensor zu benötigen, der dann auch bei Änderung sofort senden soll, ich versuche das die nächsten Tage im HB-UNI-Sensor1 als Option nachzuziehen.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Zitat von: ext23 am 13 Oktober 2018, 18:29:34
Sieht besser aus!

Ich bau das jetzt mal in mein Schlüsselkasten ein und dann schau ich mal. Muss mir nur mal eben ne kleine Platine ätzen.
Und gibt es schon Bilder ?
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire