Arduino Asksin library

Begonnen von trilu, 06 August 2013, 10:02:17

Vorheriges Thema - Nächstes Thema

trilu

kann man eigentlich unter c, also arduino ein #include mit einer variablen setzen

also sowas wie
#define my_header "Register_sonstwas.h"
#include my_header ?

das define würde ich gerne im main sketch machen und global an asksin.h übergeben und dort das include machen?

jab

Hi,

@trilu: Naja der c/c++ präprocessor kann fast alles. Ob es eine gute Idee ist ist eher die Frage ;-).

Habe jetzt das meiste hinbekommen. Der set_on / set_off Bug ist leider bestehen geblieben. Muss ich noch in FHEM gucken.

Selbst peering mit sich selber funktioniert. Also mit sich selbst per Funk. Sieht so aus:
0B 14 B4 40 5F B7 4A 5F B7 4A 02 08 (l:12)(389765)
0E 15 A4 10 5F B7 4A 1A B1 50 06 03 00 00 00 (l:15)(391667)
0A 15 80 02 1A B1 50 5F B7 4A 00 (l:11)(391809)

Eine Frage habe ich noch: Wenn ein Remote Event beim Aktor ankommt schickt er denn irgendwann ein StatusUpdate an die Zentrale? Da sehe ich irgendwie nichts im Funk. Wenn ich einen anderen Aktor schalte sieht das so aus:

0B 25 B4 40 5F B7 4A 21 D6 3B 01 07 (l:12)(2391298)
0E 25 80 02 21 D6 3B 5F B7 4A 01 01 C8 00 24 (l:15)(2391431)
0B 29 A0 01 1A B1 50 21 D6 3B 01 0E (l:12)(2393303)
0E 29 A4 10 21 D6 3B 1A B1 50 06 01 C8 00 14 (l:15)(2393432)
0A 29 80 02 1A B1 50 21 D6 3B 00 (l:11)(2393556)

Ist das schon implementiert? Ansonsten würde ich das übernehmen.


Gruß,
Jan

trilu

Peering mit sich selbst muss auch gehen, dass war so geplant, sonst könnte man seine eigenen Geräte ja nicht verknüpfen :-)
Ich muss nur noch mal an die send_poll und receive_poll ran, hier sollen die Strings einfach nur kopiert werden, so dass nicht jedes mal gesendet wird.
Das ist noch ungetestet und vermutlich fehlerhaft.

Der Aktuator muss nach einer peer message seinen Status an die Zentrale melden, dazu gibt es zwei Scenarien:
1. Der Aktuator schaltet verzögert - sieht man am ACK Status l> 0E EA 80 02 1F B7 4A 63 19 63 01 01 C8 40 4B
Vorletztes byte - die 40 signalisiert das es sich um einen verzögerten Schaltbefehl handelt, das kommt immer wenn ein Timer gesetzt ist
Hier wird der Status an die Zentrale zwei mal gesendet, einmal als Status 40 und nach dem Schaltvorgang mit Status 00

2. Der Aktuator schaltet sofort, dann wird nach dem Schalten der Status gesendet

In der relay class ist das auch so implementiert. Konfigurierbar über minDelay und randomDelay
void RL::setCallBack(void msgCallBack(uint8_t, uint8_t, uint8_t), HM *statCallBack, uint8_t minDelay, uint8_t randomDelay) {

randomDelay ist notwendig wenn man mehrere Geräte hat und der Strom ausfällt, bzw. wieder kommt und alle Geräte ihren Status melden.
Wäre kein random drin, würden alle zeitgleich senden, damit würde definitiv und trotz wiederholung, keine Message ankommen.


Kannst du mir einen Tip geben, wie ich die Library (AskSin.cpp und AskSin.h) in den Library Ordner bekomme und trotzdem Zugriff auf die Register.h im Sketch Ordner bekomme?

jab

#483
Du kannst ja einfach beides im Sketch includen. Erst die Register.h dann die Library. Wichtig ist dann nur die Reihenfolge.

Das mit dem setCallBack gucke ich mir an. Aktuell gibt das ja nur eine Nachricht aus. Ich habe mal die relayState so angepasst:

void relayState(uint8_t cnl, uint8_t curStat, uint8_t nxtStat) {
        Serial << "c:" << cnl << " cS:" << curStat << " nS:" << nxtStat << '\n';        // some debug message
        if (cnl == 3) rl[0].sendStatus();
}

Macht das Sinn so? Oder ist der überflüssig? Auf FHEM Seite bin ich noch etwas ratlos über der set_on und set_off.


Gruß,
Jan

Dirk

Hallo Horst

ich habe mal versucht das große Asksin-Modul etwas zu zerlegen.
Das ganze war doch schwieriger als erwartet.
Was auch immer sich die Arduino-IDE-Entwickler dabei gedacht haben dass im Sketch-Verzeichniss keine Unterverzeichnisse berücksichtigt werden?

Folgende Module sind jetzt separiert und Teil einer Homematic-Library
- Buttons
- cc110x
- StatusLed

Das Ganze ist nur als Idee gedacht. Vielleicht magst du da ja so übernehmen.
Die Bugs in Buttons hab ich noch nicht fixen können.

Gruß
Dirk

jab

Moin,

können wir die Lib in ein git packen? Ich würde die dann auch bei mir als git submodule einbinden und meine Änderungen als Pullrequest schicken. Die getrennten Klassen sehen schon sehr gut aus. Gefällt mir!

Zusätzlich würde ich gerne noch eine Hardware.h einfügen um alle Pins und Interrupts zu definieren.


Gruß,
Jan

trilu

#486
hab jetzt die letzte version von dirk in meinen git gepackt.
hoffe das passt so, bin git neuling!
was mich immer noch stört ist, dass die lib nicht in den library ordner kann, damit wären wir arduino kompatibel.
ich bekomme die register.h einfach nicht in die AskSin.h verlinkt - das ordner management von Arduino ist echt blöd...

https://github.com/trilu2000/AskSinLib

brauchen wir wirklich eine hardware.h - ich fände es besser die pins einfach per funktion an die module zu übergeben?
ähnlich wie beim button, led oder relay modul

cc1101 nutzt eigentlich nur SPI und der ist von arduino definiert, einzig cs und gdo0 pin müssten übergeben werden.
hm nutzt interrupt0 von pin2, den pin kann man im init übergeben, den interrupt zum pin kann man über arduino rausfinden.

jab

#487
Hi,

wir brauchen keine Hardware.h. Generell sollten wir irgendwo die Hardware definieren. Wenn man das beim Init der Klassen übergibt ist das sicherlich auch ok. Für die Interrupts brauchen wir allerdings schon irgendeine Lösung, denn das ist ja unterschiedlich.

Gibt es einen Grund warum die AskSin.h/cpp nicht in der Lib ist? Die sollte am Ende ja auch bei allen gleich sein.


Gruß,
Jan

trilu

Ich finde gerade keine Funktion von Arduino die mir den Interrupt zum Pin zurück gibt. Also machen wir es so, dass der Pin und der Interrupt übergeben werden...

AskSin.h/cpp ist nicht in der Lib weil ich keine Möglichkeit finde, die Register.h zu übergeben.
Register.h ist ja Device abhängig, sollte also nicht in den Lib Ordner, sondern in den Sketch Ordner. Blöderweise beruht aber die AskSin.h/cpp auf Angaben aus der Register.h.

Soweit ich das die letzten beiden Tage sehe, gibt es keine Möglichkeit die #defines und structs an AskSin Ordnerübergreifend zu definieren. Falls du eine Möglichkeit findest dann immer her damit!!!!!!!

jab

Hi trilu,

geht es alternativ die Lib in einen Unterordner zu packen? Das ist für mich auch einfacher da ich das dann per git submodul direkt einbinden kann.


Gruß,
Jan

trilu

nö, arduino scheint auch keine unterordner zu unterstützen - ich bin gerade echt gefrustet...

jab

Hi,

ich hab noch eine Idee. Wir machen einen Unterordner mit der Lib und entwickeln sie dort. Dazu bauen wir ein Makefile wie dieses hier http://www.iesensor.com/blog/2013/07/09/notesarduino-ide-can-not-include-libraries-within-project-subfolders/ mit dem wir dann die Lib in den Mainfolder präprozessen. Dann können wir auch alles was wir in c auch könnten.


Gruß,
Jan

trilu

verstehe ich nicht ganz, unser problem ist es ja nicht die AskSin.h/cpp in einen Unterordner zu legen, dass könnten wir ja jetzt schon.
Unser Problem ist die Verknüpfung zwischen der Register.h und der AskSin.h

AskSin.h in einen Unterordner, würde bedeuten dass die Register.h auch in den Unterordner muss. Das würde per softlink der Register.h auch gehen,
aber dann müsste bei jedem neuen Sketch der softlink neu gemacht werden - auch blöd...

jab

Hi trilu,

wenn die Lib in einem Unterordner liegt kannst du die Register.h ja includen mit include "../Register.h". Damit das in Arduino geht baut man ein Makefile dass dann beides zusammenbaut (präprozessor) damit die IDE damit klar kommt.


Gruß,
Jan

JoeALLb

Nur kurz mal als Frage: In Git selber kann man keine Links anlegen?  In Subversive geht das,  somit könnte so eine Datei direkt über solch einen Link mehrfach verwendet werden.

Gesendet von meinem Xperia Pro mit Tapatalk

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270