-
Notifications
You must be signed in to change notification settings - Fork 15
Add API documentation #4
Comments
Hi Andy, not sure if it is enough to have an explanation of the different Best regards Am 02.06.2015 um 10:46 schrieb Andy:
|
Hi Horst, you're right, documentation for classes and methods in one thing, explaining how to use them is another. The big advantage of using doxygen is that links between pages are easily done, most of them automatically. The result is a cross-referenced browsable set of HTML pages. Examples can be included in this documentation or somewhere else. Cheers, |
You should have access by now. Ich fasse mal beide Mails zusammen. Der Zweig destillRegs ist eigentlich Viele Grüße Am 02.06.2015 um 16:41 schrieb Andy:
|
Danke 😄 Was ich bauen möchte ist eine Überwachung meiner 4 dezentralen Wohnraumlüfter. Existiert momentan als Prototyp und hat im wesentlichen 1 Analogeingang zur Auswertung des Sollwerts für die Lüfterdrehzahl, 2xDHT22, 2xDS18B20 und optional 1xBMP180. Weiters ein paar Statusflags die z.T. von digitalen Eingängen abgeleitet werden. Ein Event Frame (21 Byte incl. msgCnt, deshalb auch send_generic_event()) soll alle Messwerte beinhalten und übertragen werden, wenn eine einstellbare Zeit verstrichen ist (Sendeintervall-Parameter) oder der Stellwert für den Lüfter sich geändert hat. Letzteres passiert für alle 4 Lüfter gleichzeitig, was bei der aktuellen Implementierung mit SWAP das Problem mit sich bringt, dass ohne ACK-Mechanismus die meisten Events schlicht verloren gehen, weil alle gleichzeitig senden. Und bevor ich dafür Workarounds suche, nutze ich das als willkomene Gelegenheit, mir endlich NewAskSin näher anzusehen. Im Forum lese ich seit geraumer Zeit mit, finde aber in den 80+ Seiten beim besten Willen nicht die relevaten Informationen... |
gerne :-) Da hat HM etwas ziemlich cleveres gebaut, die hatten das selbe Problem Viele Grüße Am 02.06.2015 um 17:31 schrieb Andy:
|
Stimmt, guter Punkt, das sollte möglich sein. ich verstehe das so, dass ich meine 9-10 Messwerte auf mehrere frames aufteilen kann, anhand der fld-id werden sie dann Readings zugeordnet. Bliebe die Frage, wie das im Detail in der Sensorklasse aussieht. Mein erster Teilerfolg sah so aus, dass ich mit hmPairSerial pairen konnte, der paired-to, serial, etc wird auch korrekt abgelesen, beim getConfig kommt es aber häufig zu dbg- Meldungen "timed out" in der Firmware. Möglicherweise weil mein Register.h unvollständig ist? die sensor_poll() meiner Sensorklasse wird noch nicht mal aufgerufen, evtl aus dem selben Grund. Mein Ziel bei diesen Sensoren ist weniger HM kompatibel zu sein, als vielmehr die Vorzüge des Protokolls zu nutzen. Ausserdem habe ich schon derart viele HM Geräte, dass ich die Frequenz nicht noch mit einem anderen Protokoll belegen möchte. Ein Teil der verlorenen Events geht augenscheinlich auf Kosten von HM-Geräten, die da jeweils gerade gesendet haben. Sendeslotberechnung klingt nach einer eleganten Lösung. |
Und ja, es handelt sich um 4 identische Sensoren, die jeweils 8 Messwerte + statusflags liefern. Eine Poweron-Meldung ähnlich zu den Rolloschaltern wäre irgendwann auch nett, aber erstmal die essenziellen Dinge 😄 |
So, meine register.h habe ich (mit etwas Raten) händisch angepasst und nun wird auch sensPoll() aufgerufen. Die 21 Byte scheinen übertragen zu werden, allerdings bekomme ich augenscheinlich kein ACK zurück (das ist auch so wenn der Frame nur 12 Byte payload hat). Wie kann ich das debuggen? |
der send und receive dbg ist ja per default an, was ist in deiner Am 02.06.2015 um 20:13 schrieb Andy:
|
Danke dass Du dir das anschauen willst. So sieht die Konsole direkt nach einem Neustart des Sensors aus:
Ein getConfig führt hierzu:
In der Folge logt FHEM immer wieder |
Ahh, du hast calcslot schon gefunden. Eigentlich sieht das alles nicht so schlecht aus. Das Problem kommt, so wie es aussieht, von fhem. On 2. Juni 2015 20:44:49 MESZ, Andy [email protected] wrote:
Diese Nachricht wurde von meinem Mobiltelefon mit Kaiten Mail gesendet. |
hmm.. für FHEM hatte ich ein HMConfig_VentoSense.pm gebaut, eine Bezeichnung HB-VS-I zum Devicetyp 0xAFFE vergeben (wird auch korrekt in model eingetragen, so wie der subType VentoSense). Das Event-Frame 0x71 parse ich mit CUL_HM_ParseVentoSense() und die Readings werden korrekt aus dem Frame übernommen. Das alles habe ich vom WetterSensor abgekupfert und nach gutdünken abgewandelt. So kam auch das mit dem calcslot zustande: Ich habe einfach großzügig deine Klasse THSensor für meine Klasse FanStation zweckentfremdet und teilweise angepasst. Die Frage ist, was habe ich dabei übersehen? 😄 |
Die FHEM Testumgebung besteht im Wesentlichen aus dem HM-CFG-USB mit hmland als IO, einem VCCU und dem Sensor-Device, sonst gibts dort fast nichts weiter. Der Sensor hängt zusammen mit dem HM-CFG-USB am selben Linux-Rechner. Kann die relativ kurze Entfernung von ~50cm eine Rolle spielen? |
Kann es evtl sein dass der Sensor denkt per Burst an FHEM senden zu müssen? Es kommen häufig 3x in sehr kurzen Abständen die gleichen Pakete und dann gleich ein timed out. |
OK, fhem sollte das device also kennen. <- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (1237) Die Werte in klammern sind die Systemzeit in milli Sekunden On 2. Juni 2015 21:50:16 MESZ, Andy [email protected] wrote:
Diese Nachricht wurde von meinem Mobiltelefon mit Kaiten Mail gesendet. |
hab heut morgen gesehen, dass ich an send_generic_event() tatsächlich burst=1 übergeben habe. werde das heut Abend mal mit 0 versuchen. das mit den flags habe ich noch nicht ganz verstanden, vielleicht passt meine register.h ja doch noch nicht so ganz. Grüße, |
Hi, den Burst habe ich rausgenommen, richtig funktinieren mag es aber noch nicht. Fr folgenden Log habe ich zunächst in fhem ein
Nach dem pairen sehe in in fhem ein
Bei HomeMatic-Komponenten sehe ich hier auch Einträge 01:00 (oder 01:01) und 02:01:
0A, 0B und 0C kenne ich (pairCentral) aber was bedeutet der Rest, gibt es dazu Dokumentation? Danke, |
So, bin ein gutes Stück weiter gekommen - und auch nicht. Zwischenzeitlich habe ich
Ich vermute das liegt an meiner hardware.h, hardware.cpp, evtl den Routinen die ich anstelle von HAL_extern verwende. Fast alle meine Pins am Panstamp sind belegt und die Pins initialisiere ich nicht mit den Port/Pinmask Macros sondern über Arduino-Funktionen. Ist das als Problemquelle bekannt? Kann es sein dass die Kommunikation zwischen Atmel und CC1101 nicht sauber funktioniert, dass ich da evtl Interrupthandling und/oder Pins halbtot-Konfiguriert habe? |
Mhhh, die Kommunikation zwischen Atmel und CC funktioniert eigentlich recht sauber. Ist halt SPI Kommunikation. Die Erkennung das Daten im Puffer sind wird über GDO0 signalisiert und ist PC Interrupt gesteuert. Schick mir mal deine register.h, ich schau mir die mal an. On 4. Juni 2015 18:14:59 MESZ, Andy [email protected] wrote:
Diese Nachricht wurde von meinem Mobiltelefon mit Kaiten Mail gesendet. |
Wie gesagt, im Moment fahre ich mit der register.h von AsksinNew_test. Weils auch damit nicht geht, vermute ich, dass irgenwas mit der Hardwareintitalisierung nicht tut. Ich versuche jetzt folgendes: Ich hangle mich ausgehend von AsksinNew_test langsam in Richtung meiner Hardware vor und schaue ab welcher Änderung es nicht mehr tut. Hab wohl vor dem ersten Test zuviel geändert, zeigt mal wieder, dass Testen nur durch mehr Testen zu ersetzen ist... Hier aber schonmal meine ursprüngliche register.h, zu der ich irgendwann in der ein oder anderen Form wieder hin will:
HMID und HMSR habe ich in |
das kann so nicht gehen :-) |//- ---------------------------------------------------------------------------------------------------------------------- //- channel device list table -------------------------------------------------------------------------------------------- in der channel device list sagst du es gibt zwei listen, kanal 0 mit |//- channel slice address definition ------------------------------------------------------------------------------------- probier das mal... Am 04.06.2015 um 19:55 schrieb Andy:
|
Cool, danke, nach vielen Zwischenschritten bin ich jetzt bei der alten register gelandet (incl. Deiner Korrektur) und meine Sensor Klasse liefert meinen superlangen 71er Event mit Testdaten aus. Das alles ohne timeouts und ohne Kollateralschäden für die Produktivumgebung. Als nächstes steht das Auslesen meiner Sensoren an, es bleibt also spannend. Grüße, |
Hallo Horst, Nach diesem kleinen OT-Ausflug zurück zum Thema: Ich würde an der Stelle gerne anfangen, ein wenig API Doku zu schreiben, vor allem was die Register Definition betrifft. Ein paar Verständnislücken habe ich da noch, aber die lassen sich sicher füllen. Ich werde erstmal Doxygen aufsetzen und einchecken, dann sehen wir weiter. |
Hallo Horst, |
Hi Andy, wow, das sieht echt gut aus - machst du das beruflich? Am 07.06.2015 um 16:41 schrieb Andy:
|
Hi Andy, sorry, war am Wochenende mit meiner Markise beschäftigt. Tuch getauscht, Ich hatte mir sowas schon gedacht, HM ist nicht wirklich flexibel. Das Ich bin mir nicht sicher wie Doxygen bei der Register Definition helfen Ich nutze die Atmel Soft zum proggen, also das angepasste Visual Studio Nutzt du eigentlich Hangouts oder sowas? Viele Grüße Am 07.06.2015 um 11:41 schrieb Andy:
|
I'currently trying to figure out how to best use the library and I noticed there is little to no API documentation. What do you think of inline documentation using doxygen (https://github.com/doxygen/doxygen)?
It would allow keeping the documentation close to the implementation and following this HOWTO, it could even be hosted on github alongside the library repository.
If you agree, I will start adding API documentation to my fork and send you pull-requests.
The text was updated successfully, but these errors were encountered: