AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

Tom Major

Zitat von: papa am 28 Dezember 2020, 23:23:28
patchStatus wird immer vom Device aufgerufen, wenn der Gerätestatus gesendet wird

https://github.com/pa-pa/AskSinPP/blob/ca9518b5b70d7b95daeede0f2c5053a98db8e0f7/Device.h#L357
https://github.com/pa-pa/AskSinPP/blob/ca9518b5b70d7b95daeede0f2c5053a98db8e0f7/Device.h#L391

Du kannst diese Method in "Deinen" Channel überschreiben und dort anhängen, was immer Du willst. Die Message wird vom Device vorher initialisiert.

Oh Mann, wieder mal den Wald vor lauter Bäumen nicht gesehen, ich dachte ich muss patchStatus aufrufen, ans Überschreiben wieder mal nicht gedacht  ::)
Dann sollte es in etwa so gehen wenn dein #define aktiv ist ?

// --------------------------------------------------------
template <class HALTYPE, class List0Type, class List1Type, class List4Type, int PEERCOUNT>
class ADCThreeStateChannel : public ThreeStateGenericChannel<ADCPosition, HALTYPE, List0Type, List1Type, List4Type, PEERCOUNT> {
public:
    typedef ThreeStateGenericChannel<ADCPosition, HALTYPE, List0Type, List1Type, List4Type, PEERCOUNT> BaseChannel;

    ADCThreeStateChannel()
        : BaseChannel() {};
    ~ADCThreeStateChannel() {}

    void init(uint8_t adcpin1, uint8_t adcpin2)
    {
        BaseChannel::init();
        BaseChannel::possens.init(adcpin1, adcpin2);
    }
   
    // append custom data to status message
    uint16_t myValue = 0x1234;
    void patchStatus (Message& msg) {
        msg.append(myValue);
    }
};


ich habe gesehen, du hast bereits msg.append() mit jeder Menge sinnvollen Parameter Kominationen überladen.

Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Wenn das reicht - es müsste aber hier

https://github.com/pa-pa/AskSinPP/blob/ca9518b5b70d7b95daeede0f2c5053a98db8e0f7/ContactState.h#L32

noch der #ifdef Block durch einen Aufruf

channel.patchStatus(msg);

ausgetauscht werden, damit das auch bei der normalen SensorMsg mit dran steht.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Tom Major

Danke, so langsam wird es klarer.

patchStatus() in Zeile 137 kommt also beim Gerätestatus senden zum Zug und Zeile 33 bei einer Sensor Nachricht senden.

Dann wäre es eigentlich besser du machst in #33 das
channel.patchStatus(msg);
standardmäßig rein, oder?
Dann wäre CONTACT_STATE_WITH_BATTERY ja schon eine Art universelles APPEND_CUSTOM_DATA define.

ich teste das die nächsten Tage. Danke.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Zitat von: Tom Major am 29 Dezember 2020, 00:14:30
Danke, so langsam wird es klarer.

patchStatus() in Zeile 137 kommt also beim Gerätestatus senden zum Zug und Zeile 33 bei einer Sensor Nachricht senden.

Dann wäre es eigentlich besser du machst in #33 das
channel.patchStatus(msg);
standardmäßig rein, oder?
Dann wäre CONTACT_STATE_WITH_BATTERY ja schon eine Art universelles APPEND_CUSTOM_DATA define.

ich teste das die nächsten Tage. Danke.
#33 - ja kann ich machen - wenn es erfolgreich bei Dir läuft.

Das Define brauche ich nur, damit ich im RHS-3 Sketch den Channel nicht nochmal ableiten muss.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

McShire

Zitat von: papa am 01 Dezember 2020, 08:32:03
Coole Lösung - hat mich direkt auf eine Idee gebracht.
Ich habe die InternalButton-Klasse um eine shortPress() Methode erweitert. Damit kann per Software ein kurzer Tastendruck ausgelöst werden. Das erspart Dir das Verbinden und Schalten des extra Pins. Im Prinzip sollte es reichen, wenn Du bei jedem Wechsel des Schalters ein shortPress() auslöst.

Kannst Du ja mal probieren, wenn Du magst.

Hallo papa,
ich wollte meine Projekte von ArduinoIDE nach PlatformIO umziehen.
Mit der neuen Methode shortPress() gibt das ein Problem.
In Arduino funktioniert das Kompilieren einwandfrei.
in platformIO gibt es für die Methode immer folgende Fehlermeldungen:


C:/Users/werne/Documents/PlatformIO/Projects/201229-010003-pro8MHzatmega328/src/HM-LC-Sw2-FM-WS-Blink-v1.ino:116:8: error: 'class as::InternalButton<as::MultiChannelDevice<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, as::SwitchChannel<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, 8, as::List0>, 2> >' has no member named 'shortPress'
   btn1.shortPress();
        ^
C:/Users/werne/Documents/PlatformIO/Projects/201229-010003-pro8MHzatmega328/src/HM-LC-Sw2-FM-WS-Blink-v1.ino:117:8: error: 'class as::InternalButton<as::MultiChannelDevice<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, as::SwitchChannel<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, 8, as::List0>, 2> >' has no member named 'shortPress'
   btn2.shortPress();
        ^
C:/Users/werne/Documents/PlatformIO/Projects/201229-010003-pro8MHzatmega328/src/HM-LC-Sw2-FM-WS-Blink-v1.ino: In function 'void loop()':       
Archiving .pio\build\pro8MHzatmega328\libFrameworkArduinoVariant.a
C:/Users/werne/Documents/PlatformIO/Projects/201229-010003-pro8MHzatmega328/src/HM-LC-Sw2-FM-WS-Blink-v1.ino:128:8: error: 'class as::InternalButton<as::MultiChannelDevice<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, as::SwitchChannel<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, 8, as::List0>, 2> >' has no member named 'shortPress'
   btn1.shortPress();                           //generate virtual press Button (Toggle Relay1
        ^
C:/Users/werne/Documents/PlatformIO/Projects/201229-010003-pro8MHzatmega328/src/HM-LC-Sw2-FM-WS-Blink-v1.ino:134:8: error: 'class as::InternalButton<as::MultiChannelDevice<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, as::SwitchChannel<as::AskSin<as::StatusLed<4u>, as::NoBattery, as::Radio<as::AvrSPI<10u, 11u, 12u, 13u>, 2u> >, 8, as::List0>, 2> >' has no member named 'shortPress'
   btn2.shortPress();                           //generate virtual press Button (Toggle Relay2
        ^
*** [.pio\build\pro8MHzatmega328\src\HM-LC-Sw2-FM-WS-Blink-v1.ino.cpp.o] Error 1


Wie kann ich da Abhilfe schaffen?

Viele Grüße
Werner

papa

Zitat von: McShire am 29 Dezember 2020, 01:43:26
Wie kann ich da Abhilfe schaffen?
Ist die Library die Letzte vom GitHub ?
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

McShire

Hallo papa,
Ich habe die Library importiert, die ich in der ArduinoIDE verwendet habe.
Die hatte ich aktualisiert, nachdem du die neue Methode eingefügt hast.
Aber ich schau heute abend, ob sich vielleicht etwas von de alten Version eingeschlichen hat.
Gruß
Werner

Tom Major

Zitat von: papa am 29 Dezember 2020, 00:53:07
#33 - ja kann ich machen - wenn es erfolgreich bei Dir läuft.

Das Define brauche ich nur, damit ich im RHS-3 Sketch den Channel nicht nochmal ableiten muss.

Alles klar ich melde mich wenn es soweit ist.

Kurze Zusatzfrage, ich verwende ja noch
ThreeStateGenericChannel / ThreeStateDevice
(am Anfang von AskSinPP war das wohl so)

ich sehe in ContactState.h Kommentare "alias for old code"
Kann ich ThreeStateGenericChannel durch StateGenericChannel und
ThreeStateDevice durch StateDevice ohne weitere Anpassungen ersetzen?

Danke,
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Ja - sollte das selbe sein.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Beetle2003

Zitat von: McShire am 27 Dezember 2020, 19:22:48
Hallo Ralf,
Update auf bessere Anfangsbedingungen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++  "HM-LC-Sw2-FM-WS-Blink-v1.ino"
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// 2020-11-30 McShire modification for use of a switch instead of a button for local change of the actor-relay
//            connect switch to pin 9
// 2020-12-01 papa replace simulation of btn1 on pin 7 and connection pin 7 to pin 14 by a new methode shortPress()
//            in class InternalButton
// 2020-12-27 McShire new funktion blink output at RELAY3 output, on/off controlled bei RELAY1 state,
//            blink frequency set by on-time RELAY2
//- -----------------------------------------------------------------------------------------------------------------------


viele Grüße
Werner



Hallo Werner,

ich habe den Sketch probiert. Ich mache sicherlich etwas falsch. Das blinken bekomme ich nicht abgeschaltet.
Sie blinkt immer.

Hast Du einen Tipp für mich?

Gruss
Ralf

Tom Major

Zitat von: papa am 29 Dezember 2020, 13:45:04
Ja - sollte das selbe sein.

Alles klar, Danke.

Wenn es beim Wassermelder keine Statusänderung bzgl. Wasser/Trocken gibt sendet er ja trotzdem in Abständen eine Statusnachricht.
Wo wird eigentlich das Interval dieser Statusnachricht festgelegt, wird das vom Batteriemessungs-Interval abgeleitet?
https://github.com/pa-pa/AskSinPP/blob/master/examples/HM-SEC-WDS/HM-SEC-WDS.ino#L91
Oder gibt es da einen AskSinPP internen Default?

Ich sehe sonst nichts dazu im Sketch, nur noch cycleInfoMsg(false) in List0
https://github.com/pa-pa/AskSinPP/blob/master/examples/HM-SEC-WDS/HM-SEC-WDS.ino#L59
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

McShire

Zitat von: Beetle2003 am 29 Dezember 2020, 21:54:30
Hallo Werner,

ich habe den Sketch probiert. Ich mache sicherlich etwas falsch. Das blinken bekomme ich nicht abgeschaltet.
Sie blinkt immer.

Hast Du einen Tipp für mich?

Gruss
Ralf

Hallo Ralf,
hast Du in FHEM das device HM_120901 und die zugehörigen Kanäle HM_120901_Sw_01 und HM_120901_Sw_02
angelegt?
Kannst Du dann den den Kanal HM_120901_Sw_01 in FHEM ausschalten (set HM_120901_SW_01 off), dann müsste auch der Ausgang RELAY1 LOW (0V)
sein und bei set HM_120901_SW_01 on müsste der Ausgang RELAY1 HIGH sein.
Mit Taster button1 sollte der Ausgang bei jedem Drücken wechseln.
Bitte mal probieren, des gleichen für HM_120901_SW_02, RELAY2 und button2.
schick mal das Ergebnis und ein list von HM_120901_SW_01.

Ein frohes neues Jahr
Werner

papa

Zitat von: Tom Major am 30 Dezember 2020, 16:46:52
Wenn es beim Wassermelder keine Statusänderung bzgl. Wasser/Trocken gibt sendet er ja trotzdem in Abständen eine Statusnachricht.
Wo wird eigentlich das Interval dieser Statusnachricht festgelegt, wird das vom Batteriemessungs-Interval abgeleitet?
https://github.com/pa-pa/AskSinPP/blob/master/examples/HM-SEC-WDS/HM-SEC-WDS.ino#L91
Ist das letzt Template-Argument
https://github.com/pa-pa/AskSinPP/blob/ca9518b5b70d7b95daeede0f2c5053a98db8e0f7/ContactState.h#L202
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Tom Major

Zitat von: papa am 01 Januar 2021, 12:15:14
Ist das letzt Template-Argument
https://github.com/pa-pa/AskSinPP/blob/ca9518b5b70d7b95daeede0f2c5053a98db8e0f7/ContactState.h#L202

Zunächst erst mal ein Gesundes Neues Jahr an alle AskSin++ Mitleser.

Danke, aber was mache ich falsch um CycleTime zu ändern?
Wenn du schreibst es ist das letzte Template-Argument habe ich es in meiner Naivität einfach hinten drangeschrieben, das mag er aber leider nicht:

...
typedef ADCThreeStateChannel<HalType, WDSList0, WDSList1, DefList4, PEERS_PER_CHANNEL> ChannelType;

#define CYCLETIME seconds2ticks(60ul*60*12) // two messages per day
class DevType : public StateDevice<HalType, ChannelType, 1, WDSList0, CYCLETIME> {
public:
    typedef StateDevice<HalType, ChannelType, 1, WDSList0> TSDevice;
    DevType(const DeviceInfo& info, uint16_t addr)
        : TSDevice(info, addr)
    {
    }
    virtual ~DevType() {}

    virtual void configChanged()
...



Compiling sketch...
"C:\\Users\\user7\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10813 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\\Users\\user7\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\user7\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\eightanaloginputs" "-Ie:\\_user7\\Documents\\Arduino\\libraries\\EnableInterrupt" "-Ie:\\_user7\\Documents\\Arduino\\libraries\\AskSinPP" "-Ie:\\_user7\\Documents\\Arduino\\libraries\\Low-Power" "b:\\Temp\\arduino_build_163631\\sketch\\HB-SEC-WDS-2.ino.cpp" -o "b:\\Temp\\arduino_build_163631\\sketch\\HB-SEC-WDS-2.ino.cpp.o"
e:\_user7\Documents\Arduino\_HomeMatic_Devices\HB-SEC-WDS-2\HB-SEC-WDS-2.ino: In constructor 'DevType::DevType(const as::DeviceInfo&, uint16_t)':
HB-SEC-WDS-2:276:11: error: type 'as::StateDevice<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>, 1, WDSList0>' is not a direct base of 'DevType'
         : TSDevice(info, addr)
           ^~~~~~~~
HB-SEC-WDS-2:276:30: error: no matching function for call to 'as::StateDevice<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>, 1, WDSList0, 4320000>::StateDevice()'
         : TSDevice(info, addr)
                              ^
In file included from e:\_user7\Documents\Arduino\_HomeMatic_Devices\HB-SEC-WDS-2\HB-SEC-WDS-2.ino:33:0:
e:\_user7\Documents\Arduino\libraries\AskSinPP/ContactState.h:224:3: note: candidate: as::StateDevice<HalType, ChannelType, ChannelCount, List0Type, CycleTime>::StateDevice(const as::DeviceInfo&, uint16_t) [with HalType = as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >; ChannelType = ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>; int ChannelCount = 1; List0Type = WDSList0; long unsigned int CycleTime = 4320000; uint16_t = unsigned int]
   StateDevice(const DeviceInfo& info,uint16_t addr) : DevType(info,addr), cycle(*this) {}
   ^~~~~~~~~~~
e:\_user7\Documents\Arduino\libraries\AskSinPP/ContactState.h:224:3: note:   candidate expects 2 arguments, 0 provided
e:\_user7\Documents\Arduino\libraries\AskSinPP/ContactState.h:207:7: note: candidate: as::StateDevice<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>, 1, WDSList0, 4320000>::StateDevice(const as::StateDevice<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>, 1, WDSList0, 4320000>&)
class StateDevice : public MultiChannelDevice<HalType,ChannelType,ChannelCount,List0Type> {
       ^~~~~~~~~~~
e:\_user7\Documents\Arduino\libraries\AskSinPP/ContactState.h:207:7: note:   candidate expects 1 argument, 0 provided
e:\_user7\Documents\Arduino\_HomeMatic_Devices\HB-SEC-WDS-2\HB-SEC-WDS-2.ino: In member function 'virtual void DevType::configChanged()':
HB-SEC-WDS-2:283:33: error: cannot call member function 'void as::StateDevice<HalType, ChannelType, ChannelCount, List0Type, CycleTime>::configChanged() [with HalType = as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >; ChannelType = ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>; int ChannelCount = 1; List0Type = WDSList0; long unsigned int CycleTime = 7200000]' without object
         TSDevice::configChanged();
                                 ^
Using library EnableInterrupt at version 1.0.0 in folder: e:\_user7\Documents\Arduino\libraries\EnableInterrupt
Using library AskSinPP at version 4.1.7 in folder: e:\_user7\Documents\Arduino\libraries\AskSinPP
Using library Low-Power at version 1.6 in folder: e:\_user7\Documents\Arduino\libraries\Low-Power
exit status 1
type 'as::StateDevice<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, ADCThreeStateChannel<as::AskSin<as::StatusLed<4>, as::tmBattery, as::Radio<as::AvrSPI<10, 11, 12, 13>, 2> >, WDSList0, WDSList1, as::RegList4<as::DefaultRegisterList4>, 6>, 1, WDSList0>' is not a direct base of 'DevType'

Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Im Typedef fehlt das CYCLETIME - also

public:
    typedef StateDevice<HalType, ChannelType, 1, WDSList0,CYCLETIME> TSDevice;

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