AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

papa

Da wird die Klasse für die externe Betriebsspannungmessung verwendet. Deshalb auch die vielen Parameter.
ANALOG_PIN - hier wird gemessen
ANALOG_ENABLE_PIN - zur Aktivierung der Messschaltung
ANALOG_ENABLE_STATE - der State bei dem die Messschaltung aktiviert ist
ANALOG_VCCREF - das ist die Referenzspannung - bei 0 wird intern die Referenz ermittelt
ANALOG_FACTOR - Faktor, um einen vorgeschalteten Spannungsteiler auszugleichen


Wenn Du nur die ADC brauchst, kannst Du den ganzen Quatsch auch weg lassen. Das könnte dann so aussehen
virtual void trigger (AlarmClock& clock) {
.....
#ifdef ANALOG_PIN
  uint16_t value = analogRead(ANALOG_PIN);
  msg.add(value);
#endif
.....

void setup ......
.....
#ifdef ANALOG_PIN
  pinMode(ANALOG_PIN,INPUT);
#endif
}
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

ext23

Super danke, jetzt läuft alles wie gewünscht.

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

McShire

#1547
Zitat
author=papa link=topic=57486.msg489099#msg489099 date=1473325885]
Hallo,

ich habe mich mal daran gemacht und versucht, die bestehende AskSin bzw. NewAskSin Library einfacher benutzbar zu machen. Dabei ist die AskSin++ Library rausgekommen. Sie verwendet an vielen Stellen C++ Templates. Damit lassen sich die Devicechannels recht einfach zusammenstecken. Der aktuelle (leider noch undokumentierte) Code ist hier zu finden:

https://github.com/pa-pa/AskSinPP

Anleitungen und fertige Projekte gibt es auf der AskSin++ Webseite.


Hallo papa,

mit den Projekten in der AskSin++ Library habe ich ja schon, auch mit Deiner Hilfe, einiges gemacht.
Jetzt waren meine bisherigen Arduino Mini Pro aufgebraucht und ich habe neue beschafft.
Diese ließen sich nicht wie o.a. gemäß der AskSin++ website flashen.
Nachdem ich einiges gelesen hatte, war der erste Gedanke gemäß zahlreicher Artikel, die Module haben keinen Bootloader.
Also mit ArduinoISP mit einem Nano den Bootloader geflashed, geht auch erfolgreich.
Das Modul wieder an den FTDI-Adapter gesteckt, flashen funktioniert nicht.
Das Modul über den Programmer Arduino as ISP geflashed, als erfolgreich angezeigt, an den FTDI-Adapter als
Schnittstelle zum seriellen Monitor angeschlossen, keine Ausgabe, also funktioniert die Programmierung anscheinend nicht.
Mit Arduino as ISP ein Blinkprogram geflashed, LED angeschlossen, sieh da, es blinkt.
Also konnte es nur an der Verbindung zum FTDI Interface liegen.
Nach längerem Suchen habe ich die Ursache gefunden!
Bei den neuen Modulen ist die Reihenfolge der Anschlüsse zum FTDI-Interface umgedreht, man muss das Interface andersherum einstecken,
dann funktioniert alles.
Da ich darüber nirgendwo etwas gelesen habe, schreibe ich das hier, weil andere vielleicht die gleichen Probleme haben und dann nicht lange suchen müssen
oder gar die Module als defekt entsorgen.
Vielleicht kannst Du die AskSin Webseite beim Thema Sofware mit einem Hinweis versehen, dass man bitte die Beschriftung auf den Modulen vergleicht und zum flashen den Adapter
ggf. anders herum anschließt.
Viele Grüße
Werner

Tom Major

Zitat von: McShire am 14 Juli 2021, 15:23:14
Nach längerem Suchen habe ich die Ursache gefunden!
Bei den neuen Modulen ist die Reihenfolge der Anschlüsse zum FTDI-Interface umgedreht, man muss das Interface andersherum einstecken,
dann funktioniert alles.

Die Pins des seriellen Programmier-Anschlusses waren bei mir auf Pro Mini Seite immer beschriftet, ich schaue z.B. immer auf DTR before ich den FTDI platziere.
Ist das bei deinen Pro Mini nicht mehr so? Mach doch mal bitte ein gutes Foto von der neuen Version.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

McShire

Hallo Tom ,

Bisher habe ich immer darauf geachtet, dass die beiden Oberseiten zueinander standen, wie auf den Fotos in den verschiedenen Beiträgen dargestellt wird.
Da es funktionierte, hat mich die Beschriftung nicht interessiert, zumal beim FTDI-Adapter nur DTR erkennbar ist.

Fotos kann ich hier schlecht importieren.
Ich habe mal bei EBAY (nicht auf die Preise achten, gibt es in China günstiger) zwei Links herausgesucht, auf denen man die Unterschiede sehen kann.

Meine bisher verwendeten Module: https://www.ebay.de/itm/253093645576?hash=item3aed8e8d08:g:8OIAAOSwAWtb4LA2
Die neuen Module: https://www.ebay.de/itm/163974111931?hash=item262d9e62bb:g:XdIAAOSwOOFfHJvu

Die neuen funktionieren wie die alten, man muss nur den Adapter mit der Unterseite zur Oberseite vom Mini gewandt aufstecken.

Viele Grüße
Werner

Tom Major

Hallo Werner,
Danke auf jeden Fall für die Info. Diese Variante hatte ich noch nicht gesehen.
Ich habe auch mal einen Hinweis im orangen Forum gepostet.
Im Bild links die alte Belegung, rechts die gedrehte. Bei der gedrehten steht auch nicht mehr DTR (wonach ich mich immer orientiert habe), sondern DTR ist dort mit "GRN" bezeichnet.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

McShire

Hallo Tom,
gerne lerne ich immer etwas dazu.
Klär mich doch bitte einmal auf, was das orangene Forum ist.
Viele Grüße
Werner

papa

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

McShire


Tom Major

ich habe noch eine kleinen Info bei asksinpp.de zu diesem Thema im Abschnitt Software/Flashen eingestellt.
https://asksinpp.de/Grundlagen/02_software.html#arduino-mini-pro-mit-gedrehtem-ftdi-interface
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

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

McShire

Hallo zusammen,

jetzt brauche ich wieder Hilfe.
Ich habe einen HM-Schalter auf der AskSinPP Hardware aufgebaut und mit einer modifizierten Software (mit Papas Hilfe erstellt) geflashed.

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++  "HM-LC-Sw2-FM-WS-locSwitch-FHEM-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
//- -----------------------------------------------------------------------------------------------------------------------

// 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 <Switch.h>

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

//set to 0x01 if the RELAY should be switched on LOW level
#define LOW_ACTIVE 0x00
#define RELAY1_PIN 5    // modified from A3, on my Experim.board LED2, to see relay state
#define RELAY2_PIN 6    // modified from A2

#define BUTTON1_PIN 14
#define BUTTON2_PIN 15

#define SWITCH1_PIN 9  // inserted McShire
#define SWITCH2_PIN 7  // Pin 9 und Pin 7 connect to switch, other switch pole to ground

// 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 = {
  {0x12, 0x09, 0x01},     // Device ID
  "JPLCSw2001",           // Device Serial
  {0x00, 0x09},           // Device Model
  0x24,                   // Firmware Version
  as::DeviceType::Switch, // 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;

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

// inserted by McShire
boolean localon1 = false;   // state of the Switch1, true = on, false = off
boolean localon2 = false;   // state of the Switch2, true = on, false = off


Hal hal;
SwitchType sdev(devinfo, 0x20);
ConfigButton<SwitchType> cfgBtn(sdev);
InternalButton<SwitchType> btn1(sdev, 1);
InternalButton<SwitchType> btn2(sdev, 2);

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 setup () {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  bool first = sdev.init(hal);
  sdev.channel(1).init(RELAY1_PIN, LOW_ACTIVE);
  sdev.channel(2).init(RELAY2_PIN, LOW_ACTIVE);

  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  buttonISR(btn1, BUTTON1_PIN);
  buttonISR(btn2, BUTTON2_PIN);

  pinMode(SWITCH1_PIN, INPUT_PULLUP); // inserted by McShire
  pinMode(SWITCH2_PIN, INPUT_PULLUP); // inserted by McShire

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

void loop() {
  bool worked = hal.runready();


// Version v1 Modification created by papa
if( localon1 != digitalRead(SWITCH1_PIN) ) {
  delay(50);                                   //wait because of possible switch bouncing
  localon1 = !localon1;
  btn1.shortPress();
}
if( localon2 != digitalRead(SWITCH2_PIN) ) {
  delay(50);                                   //wait because of possible switch bouncing
  localon2 = !localon2;
  btn2.shortPress();
}

  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
    hal.activity.savePower<Idle<> >(hal);
  }
}


Leider funktionieren die lokalen Betätigungen button und switch nicht. Das Schalten über FHEM funktioniert einwandfrei.
Über den seriellen Monitor sehe ich folgenden Datenverkehr:

1. Ein- und Ausschalten im FHEM Web

23:19:49.371 -> -> 0E 97 A0 11 <IOdev> <HMdev> 02 01 C8 00 00  - 27334
23:19:49.510 -> <- 0E 97 80 02 <HMdev> <IOdev> 01 01 C8 00 39  - 27457
23:19:59.921 -> -> 0E 98 A0 11 <IOdev> <HMdev> 02 01 00 00 00  - 28008
23:20:00.062 -> <- 0E 98 80 02 <HMdev> <IOdev> 01 01 00 00 39  - 28135

d.h. IOdev und der HM-Schalter haben miteinander kommuniziert.
Das Relay schaltet einwandfrei

2. lokalen Switch ein- und ausschalten

23:28:45.389 -> -> 0B 0B 02 40 <HMdev> <HMdev> 01 06  - 31365
23:28:48.472 -> -> 0B 0C 02 40 <HMdev> <HMdev> 01 07  - 31936

d.h. keine Kommunikation mit dem IOdev, Relay schaltet nicht.

3. lokalen Taster betätigen

23:32:12.282 ->  debounce
23:32:12.329 ->  pressed
23:32:12.329 ->  released
23:32:12.329 -> -> 0B 0D 02 40 <HMdev> <HMdev> 01 08  - 33474
23:32:12.374 ->
23:32:12.420 ->  debounce
23:32:12.466 ->  released
23:32:12.466 -> -> 0B 0E 02 40 <HMdev> <HMdev> 01 09  - 33634
23:32:12.512 ->

auch hier keine Kommunikation mit dem IOdev, Relay schaltet nicht.

Das Problem scheint im peering zu liegen. Vermutlich durch verschiedenes Probieren ist
in den Registern des Mini Pro etwas Falsches in den Registern.

Bei einem anderen funktionierenden Schalter steht im List


Internals:
   ...
   chanNo     01
   device     WZ_UP
   peerList   self01
   CL:
     ...
     ...

     2021-01-17 17:29:44   RegL_01.        00:00 08:00 30:06 56:00 57:24
     2021-01-17 17:29:45   RegL_03.self01  00:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:63 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:01 8B:14 8C:63
     2021-01-17 17:29:43   cfgState        updating
     ...
     ...
     2021-08-18 23:16:52   pct             0
     2021-08-17 09:21:36   peerList        self01
     2021-08-18 23:16:52   recentStateType ack
     2021-08-18 23:16:52   state           off
     2021-08-18 23:16:52   timedOn         off
     2021-08-18 23:16:51   trigLast        fhem:02
  ...
  ...
     cmds:
       TmplKey    self01:no:1629184896.98864
       TmplTs     1629184896.98864
       cmdKey     1:0:0::WZ_UP:00CB:01:self01
      ...
      ...
      ...
Attributes:
   comment    Ein Funk-Schaltaktor (Relais), der hinter einem Lichtschalter
verwendet werden kann. Das Relais kann remote mit FHEM ein- und ausgeschaltet werden und lokal durch den Lichtschalter. Der Lichtschalter muss dabei den Pin 9 nach Masse schalten und das Relais das Licht ein und ausschalten.
Ist ein Kanal von HM_120901 (Sketchbook\HM-LC-Sw2-FM-WS-locSwitch-FHEM-v1\HM-LC-Sw2-FM-WS-locSwitch-FHEM-v1.ino
Ist von HM_120901 umbenannt in WZ_UP und sitzt hinter dem Dimmer im Wohnzimmer.
   model      HM-LC-SW2-FM
   peerIDs    00000000,12090101
   room       HM_devices,Schalter,Test
   webCmd     statusRequest:toggle:on:off




Bei dem neuen Schalter steht hingegen statt self01 in den peer-Angaben immer das device WZ_UP, das ist aber der
oben gelistete Schalter


Internals:
   CFGFN     
   DEF        12090201
   FUUID      611d62e4-f33f-f21b-952d-7383af984dfbd61c
   NAME       HM_120902_Sw_01
   NOTIFYDEV  global
   NR         1333
   STATE      off
   TYPE       CUL_HM
   chanNo     01
   device     HM_120902
   peerList   WZ_UP_Sw_01
   CL:
     Authenticated 1
...
...
READINGS:
     2021-08-18 23:19:59   CommandAccepted yes
     2021-08-18 23:18:18   RegL_01.         00:00 08:00 30:06 56:00 57:24
     2021-08-18 23:18:20   RegL_03.WZ_UP_Sw_01  00:00 02:00 03:00 04:32 05:64 06:00 07:FF 08:00 09:FF 0A:01 0B:14 0C:63 82:00 83:00 84:32 85:64 86:00 87:FF 88:00 89:FF 8A:01 8B:14 8C:63
     2021-08-18 23:18:18   cfgState        updating
     2021-08-18 23:19:59   commState       CMDs_done
     2021-08-18 23:19:59   deviceMsg       off (to VCCU)
     2021-08-18 23:19:59   level           0
     2021-08-18 23:19:59   pct             0
     2021-08-18 23:18:19   peerList        WZ_UP_Sw_01
...
....



Nun die Frage:
Wie kann ich die peering Informationen auf den richtigen Stand bringen?
Ich habe das Wiki und dieses Forum durchsucht und viel probiert einschließlich alles löschen
und neu einrichten. Aber immer stand WZ_UP statt self01 in den peer Einträgen.
Hier den MiniPro austauschen geht nicht, da er bereits fest und eng zu den anderen Bauteilen
in die Platine für diesen Schalter eingelötet ist.

Viele Grüße
Werner

papa

Mach mal einen RESET - mindestens 6 Sekunden den Config-Taster drücken. Dannach wird alles im EEProm neu eingerichtet.
Alternative müsste auch ein set DEVICE reset aus FHEM funktionieren.

Code habe ich nur flüchtig überflogen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

McShire

Danke.
Reset war der richtige Hinweis.
Jetzt funktioniert alles.
Viele Grüße
Werner

McShire

Ich habe bei meiner Suche nach einer Lösung nirgendwo über den reset mit dem Konfi-button etwas gefunden oder gelesen.
Sollte man vielleicht eine Info dazu in der asksinpp.de einfügen?
Viele Grüße
Werner