AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

cw

Hallo zusammen,

ich beschäftige mich gerade mit "HM-LC-SWX-SM" und auf den UNO und NANO habe ich es auch zum Laufen gebracht.
In FHEM anmelden, LEDs steuern und auch die Taster funktionieren.

Nun würde ich gerne den Mega 2560 nutzen, klar das man die PINs nicht 1:1 über nehmen kann. Momentan bin ich auf dem Stand das das CC1101 Modul funktioniert und auch alles in FHEM steuerbar ist (so wie beim UNO / NANO), nur die Taster bekomme ich nicht ans Laufen.

Hatte mir auch schon die Files zu AskSinPP von papa angesehen aber da versteh ich noch weniger, ein Sketch zu verändern ist das eine .. :-|
Leichenhaft ausgedrückt, die PINs haben ja bestimmte "Funktionen" und die hatte ich versucht in Richtung Mega zu mappen bin aber gescheitert.
Gibt es jmd der schon einen Mega verwendet hat und mir evtl einen Tipp geben kann?

Viele Grüße ...Carsten
Grüße ...Carsten

gloob

Zeig doch mal deinen aktuellen Sketch für den Mega.
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

cw

Gerne,

sind nur minimale Änderung zum Beispiel ....
Der Abschnitt mit den Buttons ist aus purer Verzweiflung entstanden und müssten eigentlich die digitalen PINs sein.
Ich verstehe es nur einfach nicht da werden doch nur PINs übergeben, grübel.

Viele Grüße ...Carsten

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// ci-test=yes board=328p aes=no
//- -----------------------------------------------------------------------------------------------------------------------

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

// number of relays by defining the device
#define HM_LC_SW1_SM 0x00,0x02
#define HM_LC_SW2_SM 0x00,0x0a
#define HM_LC_SW4_SM 0x00,0x03

#define CFG_LOWACTIVE_BYTE 0x00
#define CFG_LOWACTIVE_ON   0x01
#define CFG_LOWACTIVE_OFF  0x00

#define DEVICE_CONFIG CFG_LOWACTIVE_OFF

#define HM_SENSOR_RELAY

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

#include <Switch.h>


// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED_PIN 13
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 10


// relay output pins compatible to the HM_Relay project
#define RELAY1_PIN 30
#define RELAY2_PIN 31
#define RELAY3_PIN 32
#define RELAY4_PIN 33
#define BUTTON1_PIN 4
#define BUTTON2_PIN 5
#define BUTTON3_PIN 6
#define BUTTON4_PIN 7


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


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

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0x90, 0x90, 0x90},     // Device ID
  "cw-mega-00",           // Device Serial
  {HM_LC_SW4_SM},         // Device Model
  0x16,                   // Firmware Version
  as::DeviceType::Switch, // Device Type
  {0x01, 0x00}            // Info Bytes
};

/**
   Configure the used hardware
*/
typedef AvrSPI<53, 51, 50, 52> RadioSPI;
typedef AskSin<StatusLed<LED_PIN>, NoBattery, Radio<RadioSPI, 2> > Hal;

// setup the device with channel type and number of channels
typedef MultiChannelDevice<Hal, SwitchChannel<Hal, PEERS_PER_CHANNEL, List0>, 4> SwitchType;

Hal hal;
SwitchType sdev(devinfo, 0x20);
#ifdef HM_SENSOR_RELAY
ConfigButton<SwitchType> cfgBtn(sdev);
InternalButton<SwitchType> btn1(sdev, 1);
InternalButton<SwitchType> btn2(sdev, 2);
InternalButton<SwitchType> btn3(sdev, 3);
InternalButton<SwitchType> btn4(sdev, 4);
#else
ConfigToggleButton<SwitchType> cfgBtn(sdev);
#endif

// if A0 and A1 connected
// we use LOW for ON and HIGH for OFF
// bool checkLowActive () {
//   pinMode(14, OUTPUT); // A0
//   pinMode(15, INPUT_PULLUP); // A1
//   digitalWrite(15, HIGH);
//   digitalWrite(14, LOW);
//   bool result = digitalRead(15) == LOW;
//   digitalWrite(14, HIGH);
//   return result;
// }

void initPeerings (bool first) {
  // create internal peerings - CCU2 needs this
  if ( first == true ) {
    HMID devid;
    sdev.getDeviceID(devid);
    for ( uint8_t i = 1; i <= sdev.channels(); ++i ) {
      Peer ipeer(devid, i);
      sdev.channel(i).peer(ipeer);
    }
  }
}

void initModelType () {
  uint8_t model[2];
  sdev.getDeviceModel(model);
  if ( model[1] == 0x02 ) {
    sdev.channels(1);
    DPRINTLN(F("HM-LC-SW1-SM"));
  }
  else if ( model[1] == 0x0a ) {
    sdev.channels(2);
    DPRINTLN(F("HM-LC-SW2-SM"));
  }
  else {
    DPRINTLN(F("HM-LC-SW4-SM"));
  }
}


void setup () {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  bool first = sdev.init(hal);
#ifdef HM_SENSOR_RELAY
  bool low = false;
#else
  bool low = (sdev.getConfigByte(CFG_LOWACTIVE_BYTE) == CFG_LOWACTIVE_ON) || checkLowActive();
#endif
  DPRINT("Invert "); low ? DPRINTLN("active") : DPRINTLN("disabled");
  sdev.channel(1).init(RELAY1_PIN, low);
  sdev.channel(2).init(RELAY2_PIN, low);
  sdev.channel(3).init(RELAY3_PIN, low);
  sdev.channel(4).init(RELAY4_PIN, low);

  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
#ifdef HM_SENSOR_RELAY
  buttonISR(btn1, BUTTON1_PIN);
  buttonISR(btn2, BUTTON2_PIN);
  buttonISR(btn3, BUTTON3_PIN);
  buttonISR(btn4, BUTTON4_PIN);
#endif
  initModelType();
  initPeerings(first);
  sdev.initDone();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
    hal.activity.savePower<Idle<> >(hal);
  }
}
Grüße ...Carsten

Tom Major

Jerome hat den Mega 2560 mit AskSinPP hier verwendet, evtl. hilft das beim Pin Mapping:
https://github.com/jp112sdl/HB-UNI-RGB-LED-CTRL
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

cw

@Tom Major,

Danke, ja das hatte ich schon gefunden und mich daran orientiert.
Das Problem ist nicht die Einbindung / Ansteuerung via FHEM sondern das ich die Taster nicht zur Steuerung verwenden kann.
Egal welchen "PIN" ich angebe, es kommt keine Reaktion vom Mega, auf den UNO / NANO alles gut.
Grüße ...Carsten

Tom Major

Zitat von: cw am 22 März 2021, 16:44:49
@Tom Major,

Danke, ja das hatte ich schon gefunden und mich daran orientiert.
Das Problem ist nicht die Einbindung / Ansteuerung via FHEM sondern das ich die Taster nicht zur Steuerung verwenden kann.
Egal welchen "PIN" ich angebe, es kommt keine Reaktion vom Mega, auf den UNO / NANO alles gut.

Eventuell mal im orangen Forum in der Rubrik
Hardwareentwicklung und Selbstbau von Aktoren und Sensoren
fragen ob Jerome was dazu sagen kann. Er ist m.W. einer der wenigen die was mit dem Mega 2560 und AskSinPP gemacht haben.

Ich glaube mich zu erinnern das dort neulich auch ein thread war wo jemand eine Frage zum 2560 hatte, ich glaube zum FreqTest.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

andre.k

Hallo,

ich habe einige Eigenbaugeräte mit AskSinPP im Einsatz und würde gern mal dieses Feature ausprobieren https://github.com/pa-pa/AskSinPP#alternative-device-reset-method.

Mir ist aber nicht klar, wie ich den ATMEGA booten kann, ohne den Resettaster zu betätigen. So wie ich den Anwendungsfall verstehe, soll er ja gerade für schwer zugängliche Geräte gedacht sein, d.h wenn ich nicht so leicht an die Konfigtaste rankomme. Aber dann komme ich üblicherweise auch nicht leicht an des Resettaster. Gibt es ein Kommando, welches den ATMEGA per Software bootet?

VG
Andre

tndx

Zitat von: andre.k am 25 März 2021, 09:09:33
Mir ist aber nicht klar, wie ich den ATMEGA booten kann, ohne den Resettaster zu betätigen. So wie ich den Anwendungsfall verstehe, soll er ja gerade für schwer zugängliche Geräte gedacht sein, d.h wenn ich nicht so leicht an die Konfigtaste rankomme. Aber dann komme ich üblicherweise auch nicht leicht an des Resettaster. Gibt es ein Kommando, welches den ATMEGA per Software bootet?

Aber an die Stromzufuhr kommst Du ja dran :) So verstehe ich jedenfalls den Anwendungsfall, ist kein Taster (oder freie Atmega-Ports) verfügbar, so kann man anstelle eines Tasterdrucks eben die Stromzufuhrunterbrechung als Trigger nehmen, das Device zu resetten. Damit es nicht zufällig bei dem nächsten Stromausfall passiert, gibt es ein Muster.

andre.k

Zitat von: tndx am 25 März 2021, 13:18:37
Aber an die Stromzufuhr kommst Du ja dran :) So verstehe ich jedenfalls den Anwendungsfall, ist kein Taster (oder freie Atmega-Ports) verfügbar, so kann man anstelle eines Tasterdrucks eben die Stromzufuhrunterbrechung als Trigger nehmen, das Device zu resetten. Damit es nicht zufällig bei dem nächsten Stromausfall passiert, gibt es ein Muster.
Danke. An POR hatte ich gar nicht gedacht.

pwlr

Moin,
ich habe mich nun auch mal an die "AskSin-Thematik" gewagt, wegen defekter und nicht mehr lieferbarer HM-MOD-EM-8.

Super Sache, danke an alle, die daran mitgearbeitet haben ! !  :)

Ich habe aber eine Frage zum HB-UNI-Sen-WEA:

nach getConfig, regSet etc muss man die ConfigTaste am Device drücken, um die pending Commands abzuarbeiten. Das ist natürlich mindestens sportlich bei auf dem Dach oder an einem Mast angebauten Devices. Kann man dieses Verhalten im Sketch (oder in der HMConfig_AskSinPPCustom.pm) dahingegehend modifizieren, dass die Commands sofort abgearbeitet werden und nur beim Pairing die ConfigTaste gedrückt werden muss ?

Alternativ muss man viel Geduld haben, nach x normalen Sendzyklen werden nach meiner Beobachtung auch die Befehle "plötzlich" abgearbeitet.

Schon mal vielen Dank für einen Tipp !

Moin
Bernd


papa

Zitat von: pwlr am 05 April 2021, 14:04:06
Moin,
ich habe mich nun auch mal an die "AskSin-Thematik" gewagt, wegen defekter und nicht mehr lieferbarer HM-MOD-EM-8.

Super Sache, danke an alle, die daran mitgearbeitet haben ! !  :)

Ich habe aber eine Frage zum HB-UNI-Sen-WEA:

nach getConfig, regSet etc muss man die ConfigTaste am Device drücken, um die pending Commands abzuarbeiten. Das ist natürlich mindestens sportlich bei auf dem Dach oder an einem Mast angebauten Devices. Kann man dieses Verhalten im Sketch (oder in der HMConfig_AskSinPPCustom.pm) dahingegehend modifizieren, dass die Commands sofort abgearbeitet werden und nur beim Pairing die ConfigTaste gedrückt werden muss ?

Alternativ muss man viel Geduld haben, nach x normalen Sendzyklen werden nach meiner Beobachtung auch die Befehle "plötzlich" abgearbeitet.

Schon mal vielen Dank für einen Tipp !
Ich glaube mich zu erinnern, dass der Sketch nur alle 10? Nachrichten nen ACK anfordert. Und nur dann werden die ausstehenden Konfig-Daten übermittelt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

pwlr

Moin papa,

danke für die schnelle Antwort.

ZitatIch glaube mich zu erinnern, dass der Sketch nur alle 10? Nachrichten nen ACK anfordert. Und nur dann werden die ausstehenden Konfig-Daten übermittelt.

Ja, ist wohl so. Aber kann man das ändern ? Ich sehe irgendwie keinen Vorteil duch diese Regelung.

Moin
Bernd

papa

Zitat von: pwlr am 05 April 2021, 21:42:01
Ja, ist wohl so. Aber kann man das ändern ? Ich sehe irgendwie keinen Vorteil duch diese Regelung.

Ja - hier - https://github.com/jp112sdl/HB-UNI-Sen-WEA/blob/be781c868938074e7013c54c748714ee3b3e2c73/HB-UNI-Sen-WEA.ino#L412
Es sind übrigens nur alle 20 Messages
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

cw

Hallo,

und sorry für die späte Reaktion meinerseits.

Nun geht es wie gedacht und für die Nachwelt:

Arduino Mega 2560 (PRO, MINI, Embedded oder wie er sonst noch genannt wird).
Ich habe die PINs der RELAYx_PINs verschoben und nun lassen sich auch andere PINs für die Taster nutzen.


#define RELAY1_PIN 28
#define RELAY2_PIN 29
#define RELAY3_PIN 30
#define RELAY4_PIN 31
#define BUTTON1_PIN 18
#define BUTTON2_PIN 19
#define BUTTON3_PIN 20
#define BUTTON4_PIN 21


Danke für eure Hilfe!
Grüße ...Carsten

ext23

Hallo,

ich versuche gerade mit dem Device HB-GEN-SENS meinen Drucksensor (via Spannungsmessung) für mein Regenfass auszulesen (MPX5010DP), das klappt auch aber ich verstehe gerade die folgenden Parameter nicht ganz:

#define ANALOG_ENABLE_PIN 0 (Der Port geht vor dem Messen hoch, richtig?)
#define ANALOG_ENABLE_STATE LOW
#define ANALOG_VCCREF 0
#define ANALOG_FACTOR 110

Kann mir hier kurz jemand ein paar Kommentare zu abgeben? Im Prinzip reichen mir für meinen Zweck die Werte des ADC aus.

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