AskSin++ Library

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

Vorheriges Thema - Nächstes Thema

Xent

Hey kurze Frage,
ich möchte einen Rolladenaktor um einen zusätzlichen Schaltkanal erweitern.
Was muss ich dazu im Sketch machen?
Klar dass ich auch wahrscheinlich ne neue Definition des Gerätes auf der CCU anlegen muss.

jp112sdl

Zitat von: Xent am 19 Juni 2018, 21:24:55
Hey kurze Frage,
ich möchte einen Rolladenaktor um einen zusätzlichen Schaltkanal erweitern.
Was muss ich dazu im Sketch machen?
Klar dass ich auch wahrscheinlich ne neue Definition des Gerätes auf der CCU anlegen muss.

Schau dir mal den HB-SW2-SENS Sketch an. (https://github.com/pa-pa/AskSinPP/blob/master/examples/custom/HB-SW2-SENS/HB-SW2-SENS.ino)
Dort sieht man schön, wie man 2 unterschiedliche Kanaltypen zu einem "MixDevice" vereinen kann.
Das klappt wunderbar. Ich hab mir damit vor kurzem erst einen kombinierten "Druckmesser mit Schließerkontakt" gebaut.
https://github.com/jp112sdl/HB-UNI-Sen-PRESS/blob/master/HB-UNI-Sen-PRESS-SC/HB-UNI-Sen-PRESS-SC.ino
Auf einem Kanal wird der Messwert des Drucksensors übertragen, auf einem anderen Kanal ein offen/zu-Kontakt bei über-/unterschreiten einer konfigurierbaren Hysterese.

papa

Oder die Klingel - ist etwas umfangreicher und für STM32 - aber da sieht man das auch gut. Es gibt dazu auch jeweils das passende FHEM Gerät.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Soo ich hab da mal was gebastelt ...
Es compilert auch, allerdings stürzt der Arduino immer sofort ab.
Hab auch schon versucht was für die CCU2 zu basteln.

Der Sketch ist noch nicht komplett fertig. Wollte erstmal schauen ob er läuft und sich pairen lässt.
Am Ende soll eine Fernbedienung für meine Markiese mit dem Arduini gesteuert werden.
Diese hat die Buttons Au, Ab, Stopp und Licht an/aus.
Daher brauche ich am besten noch den zusätzlichen Schaltkanal.

papa

Hab mal schnel drüber gesehen. Ich denke, es liegt hier dran:
  typedef ChannelDevice<Hal,VirtBaseChannel<Hal,BlindList0>,2,BlindList0> DeviceType;
  MixDevice (const DeviceInfo& info,uint16_t addr) : DeviceType(info,addr), cycle(*this) {
    DeviceType::registerChannel(c1,1);
    DeviceType::registerChannel(c3,3);
  }

Dein Device hat 2 Kanaäle, aber dur registrierst Kanal 1 und 3 -> das müsste dann auch 1 & 2 sein.
  typedef ChannelDevice<Hal,VirtBaseChannel<Hal,BlindList0>,2,BlindList0> DeviceType;
  MixDevice (const DeviceInfo& info,uint16_t addr) : DeviceType(info,addr), cycle(*this) {
    DeviceType::registerChannel(c1,1);
    DeviceType::registerChannel(c3,2);
  }

Heute Abend kann ich das ganze mal auf ner Hardware testen.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Jau das wars ... Danke

Mal schauen obs nun Paired und ob die CCU mein Device akzeptiert.

Xent

Also Pairing klappt und nachdem ich die internen Peerings angepasst habe funktioniert auch das Schalten.

Allerdings ist es so, dass im Sketch der Rolloaktor den 1. Kanal und der Schalter den zweiten Kanal hat.
In der WebGUI der CCU ist es allerdings genau umgekehrt.
Sprich wenn ich in der GUI das erste Rollo Auf/Ab schalte, dann schaltet der Schalter an und aus.
Beim 2. Rollo reagiert dann das Rollo.

Außerdem werden beide Channels als Rollo angezeigt.
Ist es möglich das, ein Kanal als Rollo und einer als Schalter dargestellt wird?
Falls nicht, werd ich damit leben können, da ja das Schalten und der Status funktionieren.

papa

Bin jetzt zwar nicht der CCU Experte, aber setzte mal bei beiden Channels den Count direkt auf 1. Das count_from_sysinfo ergibt 2. Also anstattt
<channel index="1" type="BLIND" count_from_sysinfo="23.0:1.0">
direkt
<channel index="1" type="BLIND" count="1">
und ebenso
<channel index="2" type="SWITCH" count="1">.
Außerdem würde ich dem neuen Gerät noch eine andere ID geben. Also
<type name="radio-controlled blind actuator 1-channel (flush-mount)" id="HM-LC-Bl1PBU-FM" updatable="true" priority="2">
ersetzen durch z.B.
<type name="radio-controlled blind actuator 1-channel (flush-mount)" id="HB-LC-Bl-Sw" updatable="true" priority="2">.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Xent

Das mit der ID hatte ich schon angepasst.
Allerdings wird es immer noch als HM-LC-BlX gefunden.
In einer anderen XML steht folgendes drin:
        <type name="generic blind actuator" id="HM-LC-BlX" priority="1">
            <parameter index="9.0" size="1.0" cond_op="LE" const_value="0x23" />
            <parameter index="22.0" size="1.0" const_value="0x30" />
        </type>


Was bedeutet eigentlich der Parameter index 9?
Das mit dem cond_op könnte ich mir denken:
LE = lower equal
E = equal
GE = greater equal

jp112sdl

An dieser Stelle wird die Firmware Version des Device übermittelt.
Unterschiedliche Firmware Stände der selben Device ID nutzen bspw unterschiedliche Parameter, die erst mit neueren Firmwareständen hinzukam.
Daher gibt es für ein und den selben Gerätetyp auch manchmal mehrere XML Files. (Auch mit _le (less or equal) in Dateinamen)


Gesendet von iPhone mit Tapatalk

Xent

Ok, dann könnte da noch mein Fehler sein.
Die Firmware Version war 0x21 und natürlich der Typ 0x30 und da die Priorität von diesem Eintrag höher als die der anderen ist, wurde das immer als dieses Gerät erkannt.

Werde das mal ändern und morgen testen.
Kann jetzt leider die CCU nicht mehr neustarten, da dann möglicherweise die Rollos der Kids wieder hochfahren xD
Oder gibts ne andere Möglichkeit die Typen neu laden zu lassen ohne nen kompletten Reboot?

jp112sdl

Ja
/etc/init.d/S61rfd restart


Gesendet von iPhone mit Tapatalk

jp112sdl

Wenn du eh eine neue eigene Device ID für dein Gerät vergeben hast, kannst du die ganze Zeile mit dem Index 9 auch rausschmeißen. Dann ist es egal, welche Firmware Version du aus deinem Sketch übermittelst.


Gesendet von iPhone mit Tapatalk

Xent

Hmm irgendwie will das ganze nicht so richtig ...

Hier sind die Definitionen im Sketch:
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
    {0x59,0x32,0xaf},              // Device ID
    "papa5932af",                  // Device Serial
    {0xf0,0x0f},                   // Device Model
    0x40,                          // Firmware Version
    as::DeviceType::BlindActuator, // Device Type
    {0x01,0x00}                    // Info Bytes
};


Und hier die in der XML:
    <supported_types>
        <type name="radio-controlled blind actuator 1-channel (flush-mount)" id="HM-LC-Bl-SW" updatable="true" priority="1">
            <parameter index="10.0" size="2.0" const_value="0xF00F" />
        </type>
    </supported_types>

jp112sdl

Setze mal die Info Bytes beide auf 0x01.

Kann leider nicht viel mehr beim Debuggen helfen, bin bis Ende nächster Woche nur mobil unterwegs.
Aber wenn es dann immer noch ungelöste Probleme gibt, schau ich noch mal mit drauf.


Gesendet von iPhone mit Tapatalk