Rolladenaktor für 2 Rolladen

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
ereus
Beiträge: 47
Registriert: 03.12.2018, 13:28
System: CCU
Wohnort: Bad Salzschlirf
Hat sich bedankt: 24 Mal
Danksagung erhalten: 1 Mal

Rolladenaktor für 2 Rolladen

Beitrag von ereus » 19.11.2023, 09:02

Ich habe den Rolladenaktor für zwei Rolläden von Stefan Macher nachgebaut. Allerdings verwende ich anstatt 24 Volt Relais 5 Volt Relais und auch keinen Regensensor. Ich verwende dazu das Script von Jérôme. Über die Homematic funktioniert die Schaltung so wie sie soll. Was nicht funktioniert, ist die Steuerung der Rollos über die beiden Tasten. Selbst wenn ich die Masse direkt auf Pin D5 oder PIN 4 oder PIN 6 oder PIN 3 lege, tut sich nichts. Hat schon mal jemand diesen Rolladenaktor nachgebaut und kann mir da weiterhelfen?
Schaltung.jpg
platine.jpg


Hier ist das Script dazu:


//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2017-12-14 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 <Blind.h>

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

#define ON_RELAY_PIN 14
#define DIR_RELAY_PIN 15

#define ON_RELAY2_PIN 16
#define DIR_RELAY2_PIN 17

#define UP_BUTTON_PIN 5
#define DOWN_BUTTON_PIN 4

#define UP_BUTTON2_PIN 6
#define DOWN_BUTTON2_PIN 3

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

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

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0x00, 0x05, 0xaf}, // Device ID
"JPBL200001", // Device Serial
{0x00, 0x05}, // Device Model
0x24, // Firmware Version
as::DeviceType::BlindActuator, // Device Type
{0x01, 0x00} // Info Bytes
};

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

DEFREGISTER(BlindReg0, MASTERID_REGS, DREG_INTKEY, DREG_CONFBUTTONTIME, DREG_LOCALRESETDISABLE)

class BlindList0 : public RegList0<BlindReg0> {
public:
BlindList0 (uint16_t addr) : RegList0<BlindReg0>(addr) {}
void defaults () {
clear();
// intKeyVisible(false);
confButtonTime(0xff);
// localResetDisable(false);
}
};


class BlChannel : public ActorChannel<Hal, BlindList1, BlindList3, PEERS_PER_CHANNEL, BlindList0, BlindStateMachine> {
private:
uint8_t on_relay_pin;
uint8_t dir_relay_pin;
public:
typedef ActorChannel<Hal, BlindList1, BlindList3, PEERS_PER_CHANNEL, BlindList0, BlindStateMachine> BaseChannel;

BlChannel () : on_relay_pin(0), dir_relay_pin(0) {}
virtual ~BlChannel () {}

virtual void switchState(uint8_t oldstate, uint8_t newstate, uint32_t stateDelay) {
BaseChannel::switchState(oldstate, newstate, stateDelay);
if ( newstate == AS_CM_JT_RAMPON && stateDelay > 0 ) {
motorUp();
}
else if ( newstate == AS_CM_JT_RAMPOFF && stateDelay > 0 ) {
motorDown();
}
else {
motorStop();
}
}

void motorUp () {
digitalWrite(dir_relay_pin, HIGH);
digitalWrite(on_relay_pin, HIGH);
}

void motorDown () {
digitalWrite(dir_relay_pin, LOW);
digitalWrite(on_relay_pin, HIGH);
}

void motorStop () {
digitalWrite(dir_relay_pin, LOW);
digitalWrite(on_relay_pin, LOW);
}

void init (uint8_t op, uint8_t dp) {
on_relay_pin = op;
dir_relay_pin = dp;
pinMode(on_relay_pin, OUTPUT);
pinMode(dir_relay_pin, OUTPUT);
motorStop();
BaseChannel::init();
}
};


// setup the device with channel type and number of channels
typedef MultiChannelDevice<Hal, BlChannel, 2, BlindList0> BlindType;

Hal hal;
BlindType sdev(devinfo, 0x20);
ConfigButton<BlindType> cfgBtn(sdev);
InternalButton<BlindType> btnup(sdev, 1);
InternalButton<BlindType> btndown(sdev, 2);
InternalButton<BlindType> btnup2(sdev, 3);
InternalButton<BlindType> btndown2(sdev, 4);

void initPeerings (bool first) {
// create internal peerings - CCU2 needs this
if ( first == true ) {
HMID devid;
sdev.getDeviceID(devid);
Peer p1(devid, 1);
Peer p2(devid, 2);
Peer p3(devid, 3);
Peer p4(devid, 4);
sdev.channel(1).peer(p1, p2);
sdev.channel(2).peer(p3, p4);
}
}

void setup () {
DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
//storage().setByte(0,0);
bool first = sdev.init(hal);
sdev.channel(1).init(ON_RELAY_PIN, DIR_RELAY_PIN);
sdev.channel(2).init(ON_RELAY2_PIN, DIR_RELAY2_PIN);

buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
buttonISR(btnup, UP_BUTTON_PIN);
buttonISR(btndown, DOWN_BUTTON_PIN);
buttonISR(btnup2, UP_BUTTON2_PIN);
buttonISR(btndown2, DOWN_BUTTON2_PIN);

initPeerings(first);
sdev.initDone();
}

void loop() {
bool worked = hal.runready();
bool poll = sdev.pollRadio();
if ( worked == false && poll == false ) {
hal.activity.savePower<Idle<> >(hal);
}
L.G. aus Bad Salzschlirf

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

Re: Rolladenaktor für 2 Rolladen

Beitrag von papa » 19.11.2023, 09:50

Gibt es Ausgaben auf der Serial-Console ?
Anfragen zur AskSin++ werden nur im Forum beantwortet

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Rolladenaktor für 2 Rolladen

Beitrag von jp112sdl » 19.11.2023, 10:05

Ansonsten mal "Ablernen mit Werksreset" oder den Reset am Gerät durchführen (Configtaster ~6 Sekunden halten) und neu anlernen.
Evtl. fehlt es nur mal wieder an den internen Peerings.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

ereus
Beiträge: 47
Registriert: 03.12.2018, 13:28
System: CCU
Wohnort: Bad Salzschlirf
Hat sich bedankt: 24 Mal
Danksagung erhalten: 1 Mal

Re: Rolladenaktor für 2 Rolladen

Beitrag von ereus » 19.11.2023, 10:57

Hier habe ich mal den Serielen Monitor beim Drücken der Tasten dargestellt. Was ich ja im Script geändert habe, ist der #define UP_BUTTON2_PIN 7 auf #define UP_BUTTON2_PIN 6, weil im Schaltplan D6 belgt war und D7 ohne Belegung war.


10:50:43.560 -> pressed
10:50:43.852 -> longpressed
10:50:43.852 -> -> 0B 06 02 40 000508 000508 42 03 - 2590
10:50:43.852 -> longreleased
10:50:43.944 ->
10:50:47.934 -> ignore 0F 60 86 10 638D3B 000000 0A 78 99 0B 00 00 - 3104
10:50:57.566 -> debounce
10:50:57.633 -> pressed
10:50:57.971 -> longpressed
10:50:57.971 -> -> 0B 07 02 40 000508 000508 44 00 - 3149
10:50:58.063 -> longreleased
10:50:58.110 ->
10:51:00.364 -> debounce
10:51:00.410 -> pressed
10:51:00.758 -> longpressed
10:51:00.758 -> -> 0B 08 02 40 000508 000508 43 00 - 3659
10:51:00.790 -> longreleased
10:51:00.828 ->
L.G. aus Bad Salzschlirf

ereus
Beiträge: 47
Registriert: 03.12.2018, 13:28
System: CCU
Wohnort: Bad Salzschlirf
Hat sich bedankt: 24 Mal
Danksagung erhalten: 1 Mal

Re: Rolladenaktor für 2 Rolladen

Beitrag von ereus » 19.11.2023, 11:20

jp112sdl hat geschrieben:
19.11.2023, 10:05
Ansonsten mal "Ablernen mit Werksreset" oder den Reset am Gerät durchführen (Configtaster ~6 Sekunden halten) und neu anlernen.
Evtl. fehlt es nur mal wieder an den internen Peerings.
Vielen Dank!

Das habe ich gemacht und siehe da, es funktioniert jetzt auch über die Taster. Ich habe zur Zeit in meinem Haus überall HM-MOD-Re-8 Module verbaut und die funktionieren immer schlechter je älter die werden. Deshalb will ich Alle mit dieser Steuerung austauschen. Da ich jetzt ganz viele dieser neuen Aktore bauen möchte meine Frage: Wie kann ich das mit dem Peering beim anlernen gleich richtig machen?
L.G. aus Bad Salzschlirf

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Rolladenaktor für 2 Rolladen

Beitrag von jp112sdl » 19.11.2023, 12:35

ereus hat geschrieben:
19.11.2023, 11:20
Wie kann ich das mit dem Peering beim anlernen gleich richtig machen?
Am besten nach dem Flashen direkt noch mal den Werksreset (Configtaster ~6 Sekunden halten) machen.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“