Jump to content

André K.

Members
  • Content Count

    40
  • Joined

  • Last visited

Everything posted by André K.

  1. Hast natürlich Recht, deshalb habe ich das if() wohl auch drin. So ganz klar ist mir der ENUMERATION_TYPE_DISCONNECTED übrigens noch nicht. Ist damit der Fall gemeint, daß ein einzelnes Bricklet weg ist, also wenn ich im Laufenden Betrieb den Stecker ziehen würde? Oder ist das sozusagen die "USB-Version" vom IPCON_CALLBACK_DISCONNECTED, das es ja auch noch gibt? Also wenn ich das USB-Kabel des Stapels vom Rechner abziehe? In der Doku steht ja auch der Hinweis "Nur bei USB-Verbindungen möglich". André
  2. Das passiert ja eh, denn bei einem Reconnect wird ja ipcon_enumerate() aufgerufen, und das Enumerate-Callback sieht so aus: void cb_enumerate(const char *uid, const char *uplink_uid, char pos, uint8_t hw_vers[3], uint8_t fw_vers[3], uint16_t did, uint8_t enume_type, void *user_data) { /* Nur auf manuell angestoßene Aufzählungen reagieren: */ if(enume_type == IPCON_ENUMERATION_TYPE_AVAILABLE) switch (did) { case AMBIENT_LIGHT_V3_DEVICE_IDENTIFIER: if (cfg_dumpmode) printf("Found %s with UID=%s\n", AMBIENT_LIGHT_V3_DEVICE_DISPLAY_NAME, uid); /* Wurde der Speicher noch nicht allokiert? */ if (bl_light == NULL) bl_light = new AmbientLightV3; else ambient_light_v3_destroy(bl_light); ambient_light_v3_create(bl_light, uid, &bd_conn); /* Konfiguration: 0-64000 Lux (= kein Gain), 150ms (Default laut Datenblatt: 100ms) */ ambient_light_v3_set_configuration(bl_light, AMBIENT_LIGHT_V3_ILLUMINANCE_RANGE_64000LUX, AMBIENT_LIGHT_V3_INTEGRATION_TIME_150MS); ambient_light_v3_set_status_led_config(bl_light, AMBIENT_LIGHT_V3_STATUS_LED_CONFIG_OFF); /* Callback für Umgebungshelligkeit: 1s */ ambient_light_v3_register_callback(bl_light, AMBIENT_LIGHT_V3_CALLBACK_ILLUMINANCE, (void (*)(void))cb_illuminance, NULL); ambient_light_v3_set_illuminance_callback_configuration(bl_light, 1000, true, AMBIENT_LIGHT_V3_THRESHOLD_OPTION_OFF, 0, 0); break; Und dann folgen halt noch CASEs für sämtliche andere Bricklets die so zum Einsatz kommen. Vielleicht reicht es ja schon, einfach das if (enum_type == …) wegzulassen? Ich weiß gerade gar nicht mehr warum ich das da eingebaut habe xD André
  3. Kann ich denn davon ausgehen, daß sich das Bricklet dann im Initialzustand befindet? Oder sollte ich da vorher am besten noch eine Art Reset/Wipe auslösen, wenn das geht? Bei einem Verlust der IP-Connection habe ich das übrigens folgendermaßen gelöst: void cb_connected(uint8_t reason, void *user_data) { syslog(LOG_INFO, "Connection to brickd (re)established (reason=%i)", reason); /* Bei einem Reconnect Aufzählung (und damit Initialisierung) neu anstoßen: */ if(reason == IPCON_CONNECT_REASON_AUTO_RECONNECT) ipcon_enumerate(&bd_conn); } Da baue ich aber auch im Vertrauen darauf, daß sich die Bricklets "hoffentlich" alle noch im Initialzustand befinden — was aber natürlich nicht der Fall sein muß. Wenn sich jemand per Brick Viewer verbindet und eine Einstellung ändert die ich nicht extra initialisiere weil der Default OK ist wird die Einstellung vermutlich auch so bleiben … Wie macht man sowas am elegantesten? André
  4. Guter Punkt, danke. In meinem Enumerate-Callback ist im Prinzip nur ein großer switch() drin, der sämtliche Callbacks und Initialisierungen einrichtet, und nur für den Master einen Eintrag ins Event-Log schreibt. Außerdem beginnt er folgendermaßen: if(enume_type == IPCON_ENUMERATION_TYPE_AVAILABLE) switch (did) Das heißt, ich bekomme die anderen Types gar nicht mit. Ich baue da mal einen else-Zweig rein der zu einem weiteren Event-Log-Eintrag führt um ein Gefühl dafür zu bekommen was da ggf. ankommt. André
  5. The story continues 😅 Gestern Abend hat sich auch das neue Temperatur-Bricklet verabschiedet, nach 35 Tagen störungsfreiem Betrieb. Immerhin nicht mit einem falschen Wert, sondern es hat einfach aufgehört den Callback auszulösen. Wiederbelebung per Brick Viewer war Gott sei Dank wieder möglich. Jetzt bin ich mit meinem Latein so langsam am Ende oder hat jemand von euch noch einen Ansatz? André
  6. So, mal wieder eine kleine Rückmeldung meinerseits Die drei neuen Bricklets für Temperatur, Luftdruck und Luftfeuchte sind seit etwas mehr als anderthalb Wochen montiert und seitdem läuft es absolut störungsfrei, yay! Das "alte" Temp-Bricklet habe ich ins Gehäuse rein gesetzt um die interne Temperatur loggen zu können, wie vermutet funktioniert auch das, aber jetzt ist natürlich auch ein erheblich kürzeres Kabel im Spiel. Wenn ihr mal schauen wollt: http://www.koethur.de/wetter/ Und nicht wundern, die "Live-Aktualisierung" stoppt nach 30s, das ist noch Absicht … André
  7. OK ich verstehe, also lag ich mit meiner Vermutung gar nicht so falsch. Im Grunde brauche ich die Voltage gar nicht, ich "zweckentfremde" das bloß um an einen festen 60-Sekunden-Timer zu kommen: /* Callback für Diagnosefunktion: 60s */ master_register_callback(br_master, MASTER_CALLBACK_STACK_VOLTAGE_REACHED, (void (*)(void))cb_master_diag, NULL); master_set_stack_voltage_callback_threshold(br_master, MASTER_THRESHOLD_OPTION_INSIDE, 0, 65535); master_set_debounce_period(br_master, 60000); In cb_master_diag() frage ich dann lediglich die interne Temperatur ab, um die etwas im Auge zu behalten. Leider gibt es dafür ja keinen direkten Callback. Edit: Interessant wäre ja eigentlich der Stromverbrauch, aber ich meine ich hätte das mal ganz zu Anfang getestet und immer 0 erhalten, trotz Ethernet-Extension mit PoE, also kein USB. Auch im Brick-Viewer wird immer 0 angezeigt.
  8. Kommt ja sicherlich noch. Und C ist halt meiner Ansicht nach eh am Wichtigsten, das ist da wo die Musik spielt xD André
  9. Die spannende Frage für mich ist jetzt: Wie lang ist denn bei Dir "zu kurz"? Bei mir sind es 50cm … André
  10. Uwe, rtrbt bzw. Erik hat doch die C/C++-Bindings hier im Thread verlinkt, ganz unten auf der vorigen Seite. Die verwende ich, und da ist die Funktion drin. Und BTW, weitere Anregung: Daß ihr den gleitenden Mittelwert in die Firmware von Barometer 2.0 und Hygrometer 2.0 eingebaut habt ist super! Allerdings liefern diese Bricklets ja auch so schon recht stabile Werte … wo das aber echt noch fehlt, ist beim Ambient Light 3.0 — denn egal was ich einstelle, bei Sonne hüpfen die Lux-Werte dermaßen rauf und runter daß ich geneigt bin ab 1000 lx das ganze umspringen zu lassen auf Anzeige in "Kilo-Lux" (falls es das überhaupt gibt ;)) und maximal einer Nachkommastelle. André
  11. Anregung/Verbesserungsvorschlag: Kann man die Berechnung des normalisierten Luftdrucks (also QFF) nicht auch in die Firmware gießen, so daß man dann bloß noch die Höhe bei der Initialisierung übergeben braucht bzw. im EEPROM ablegt? Alternativ wäre natürlich ein kombinierter Callback mit Druck und Temperatur cool. Weil so wie es jetzt ist, lässt es sich eigentlich nicht elegant lösen. Entweder, ich benutze den getter für die Temperatur innerhalb des Druck-Callbacks (unschön, wenn man sonst ohne getter auskommt), oder ich definiere eine globale Variable die von einem separaten Temperatur-Callback gefüllt wird (auch unschön) … Ich glaube ich mache es ermal mit dem getter. Globale Variable ist mehr bäh als ein sekündlicher getter. André
  12. Ich schon wieder Ich sitze hier gerade und bin dabei, meinen Gateway-Daemon auf die neuen Sensoren für Luftdruck etc. umzubauen. Meine Testumgebung: Macbook USB zum Master 2.1 und daran die drei Bricklets (Temp, Druck, Hygro alle V2) Ich hab in dem Programm ein Callback MASTER_CALLBACK_STACK_VOLTAGE_REACHED eingebaut um ein paar Statuswerte abzufragen, dieser wird aber hier in der Testumgebung gar nicht aufgerufen. Warum? Liegt es daran daß ich per USB (und nicht per Ethernet-Extension) dran gehe, oder daran daß es eigentlich gar kein Stapel ist mit nur einem Master? Bin etwas verwirrt.
  13. Die neuen Sensoren sind übrigens unterdessen angekommen, habe mir auch einen weiteren Master gegönnt um hier eine Test- und Entwicklungsumgebung zu haben. Aber als ob die beiden Bricklets es mitbekommen hätten daß sie angezählt sind und es ihnen an den Kragen gehen soll, verhalten sie sich seit Tagen völlig normal 😅 André
  14. Alles klar, vielen Dank. Habe gerade eben nochmal das 2.0-Komplettpaket (Temp, Baro, Humidity) geordert … Kann ich das alte Temp-Bricklet mit einem kurzen Kabel wohl "gefahrlos" an dem einen freien Port am 2. Master anschließen, um die Temperatur innerhalb des Gehäuses zu messen? So hätte es wenigstens noch eine Daseinsberechtigung 😅 André
  15. Ganz so kann man das nicht sagen. Sowohl Temperature- als auch Barometer-Bricklet hauen sporadisch mal nur einen einzelnen falschen Wert raus, zum Beispiel gestern Abend einfach mal zwischen drin -1°C, hier gut an der Min/Max Auswertung zu sehen: Temperature 8.21858 7.87 8.68 2020-05-06 22:00:00 Temperature 9.21769 8.68 9.75 2020-05-06 21:30:00 Temperature 10.2747 -1 10.87 2020-05-06 21:00:00 Temperature 11.5355 10.81 12.31 2020-05-06 20:30:00 Temperature 12.8846 12.31 13.5 2020-05-06 20:00:00 Auch das Barometer macht das: Pressure 978.992 978.792 979.112 2020-05-06 00:00:00 Pressure 978.699 978.598 978.835 2020-05-05 23:30:00 Pressure 977.98 10 978.658 2020-05-05 23:00:00 Pressure 978.07 977.916 978.462 2020-05-05 22:30:00 Pressure 977.916 977.865 977.949 2020-05-05 22:00:00 Dabei geht dann aber nicht gleich der ganze Bus "kaputt". Ich habe mir heute morgen auch schon sowas ähnliches gedacht als dann (hoffentlich) endgültige Lösung. Und vielen Dank, aber ich bestelle die dann einfach via Shop, auf die paar Euro kommt es echt nicht mehr an 😅 der größere Hemmschuh ist meine Motivation, nochmal aufs Dach zu kraxeln und in 10 Meter Höhe an dem Kasten herum zu schrauben. Aber wenn's hilft, ist das ein kleiner Preis Ich würde dann folgendes tauschen: Barometer gegen Barometer 2.0, Temperature gegen Temperature 2.0 Die Arbeitsweise vom Humidity mit dem Analogwert gefällt mir eigentlich sehr gut, erinnert mich an die gute alte Conrad-Telemetrie-Wetterstation die an dieser Stelle ja 24 Jahre lang zuverlässigst gearbeitet hat. Oder würdest Du empfehlen da auch auf Humidity 2.0 zu gehen? André
  16. Leider ist es heute morgen wieder aufgetreten, sogar zwei mal ganz kurz hintereinander. Mittlerweile bin ich natürlich auch etwas paranoid und schaue gefühlt alle 30 Sekunden drauf 😅 Ich habe den Verlauf mal isoliert, Fall 1 von 6:38 Uhr: 428482 2020-05-07 06:38:26 Temperature 331 428485 2020-05-07 06:38:27 Pressure 980778 428486 2020-05-07 06:38:27 Temperature 337 428489 2020-05-07 06:38:28 Pressure 980788 428493 2020-05-07 06:38:29 Pressure 980785 428496 2020-05-07 06:38:30 Pressure 980808 428499 2020-05-07 06:38:31 Pressure 980790 428503 2020-05-07 06:38:32 Pressure 980773 428506 2020-05-07 06:38:33 Temperature -3843 428507 2020-05-07 06:38:33 Pressure 10000 428819 2020-05-07 06:40:39 Temperature 0 428822 2020-05-07 06:40:40 Temperature -3843 429029 2020-05-07 06:41:59 Temperature -8387 429032 2020-05-07 06:42:00 Temperature -3843 430148 2020-05-07 06:47:48 Temperature -8387 430151 2020-05-07 06:47:49 Temperature -3843 430176 2020-05-07 06:48:01 Pressure 980942 430194 2020-05-07 06:48:01 Temperature 418 430198 2020-05-07 06:48:02 Pressure 980901 430207 2020-05-07 06:48:03 Pressure 980907 430210 2020-05-07 06:48:04 Pressure 980926 Um 6:48 habe ich dann manuell via Brick-Viewer resettet. Dann ist es eine Minute später gleich wieder passiert: 430487 2020-05-07 06:49:03 Pressure 980906 430494 2020-05-07 06:49:04 Pressure 980910 430500 2020-05-07 06:49:05 Pressure 980926 430504 2020-05-07 06:49:06 Pressure 980902 430507 2020-05-07 06:49:07 Pressure 980906 430508 2020-05-07 06:49:07 Temperature -3843 430512 2020-05-07 06:49:08 Pressure 10000 430604 2020-05-07 06:49:31 Temperature -8387 430613 2020-05-07 06:49:32 Temperature -3843 430765 2020-05-07 06:50:09 Temperature -8387 430769 2020-05-07 06:50:10 Temperature -3843 430789 2020-05-07 06:50:17 Temperature -8387 430794 2020-05-07 06:50:18 Temperature -3843 431211 2020-05-07 06:52:28 Pressure 980906 431212 2020-05-07 06:52:28 Temperature 475 431216 2020-05-07 06:52:29 Pressure 980897 431220 2020-05-07 06:52:30 Pressure 980882 Besteht denn ein Unterschied zwischen der "Spezial-Firmware" von letzter Woche und der neuen "offiziellen" FW in Kombination mit dem langsamen Modus? Edit: Die Temperatur ist die vom Temperature-Bricklet, die vom Barometer beachte ich in der Erfassung gar nicht Edit 2: Ich bin ja echt froh daß "nur" diese beiden Bricklets davon betroffen sind. Aber gibt es dafür eigentlich eine schlüssige Erklärung? An demselben Master hängen ja noch Humidity und Ambient Light 3.0. André
  17. Puh okay, erstmal Asche auf mein Haupt 😅 Wie ich gerade bemerkt habe, hat systemd gestern gar nicht die neue Version des Binarys verwendet, sondern noch die vorige Version. Ist mir leider erst jetzt aufgefallen, weil systemd die komplette Ausgabe von stdout immer erst beim Beenden ins Log schreibt (warum eigentlich erst dann?). Ich lasse mir jetzt beim Start direkt eine Info mit der Version ins Syslog schreiben und kann daher sagen, daß nun wirklich die richtige Version läuft 🙈 André
  18. Kommando leider zurück: Jetzt ist obendrein die -83,87° wieder aufgetreten 😕 *seufz* Ich wollte eigentlich morgen die komplette Einbindung in die Website vornehmen und ich hatte so ein gutes Gefühl … 😩 So ist der Aufruf doch richtig: /* Langsame Busgeschwindigkeit: */ barometer_set_i2c_mode(bl_baro, BAROMETER_I2C_MODE_SLOW);
  19. So, heute erst dazu gekommen, aber das FW-Update ist drin und mein Meteodat-Daemon ist nun gegen die neueste Version der Bindings gelinkt und führt auch die Initialisierung durch. Ich bin gespannt und beobachte das in den nächsten Tagen André
  20. Sehr cool, das heißt, das FW-Update müsste normal im Brick Viewer erscheinen und kann einfach drüber gebügelt werden? Ich benutze ganz klassisch die C/C++-Bindings André
  21. Mal eine kleine Rückmeldung meinerseits … Seitdem ich den langsamen Modus für das Temp-Bricklet drin habe und die Spezial-Firmware im Barometer-Bricklet sind jetzt keine Probleme mehr aufgetreten. Ich werde weiter beobachten und bin aber erstmal vorsichtig optimistisch André
  22. So, neue Firmware ist geflasht. Ist das korrekt daß die Versionsnummer dieselbe geblieben ist? Temperatur ist auch den ganzen Tag über unauffällig geblieben — so langsam nähern wir uns einem Zustand, daß ich die Daten ruhigen Gewissens wieder in meine Homepage einblenden kann. Und an der Stelle mal schon mal danke und Hut Ab für das durchdachte Gesamtdesign. Daß ich von hier aus per VPN die FW flashen kann und nicht mit nem Notebook auf dem Dach rumkraxeln muß ist schon cool. 😎 André
  23. Vielen Dank! Sobald ich daheim bin teste ich das. Ich habe bisher noch nie manuell eine neue FW eingespielt, das geht aber hoffentlich auch einfach durch die Ethernet-Extension (und ein VPN) hindurch via Brick-Viewer, oder? André
  24. Ich gebe auch mal nen kurzen Zwischenbericht: zum ersten Mal ist es über Nacht stabil durchgelaufen, was das angeht bin ich vorsichtig optimistisch ;) Aber: hab im Barometer-Log schon wieder einen Ausreißer nach unten gesehen … wie befürchtet ist also nicht nur das Temperature-Bricklet betroffen. Immerhin ist bisher kein reset notwendig gewesen. André
  25. Ah, gut zu wissen! Ich baue das gleich heute Nachmittag noch in meinen Gateway-Daemon ein und werde berichten. Drei Fragen noch, für mich (und sicher auch einige andere) zum Verständnis: Wirkt sich das auch negativ auf die Geschwindigkeit anderer Bricklets aus? Das schnellste was ich eingerichtet habe sind 200ms Callback für das IO16. Muß ich damit rechnen, daß das Flag durch einen Connect vom Brick-Viewer zurückgesetzt wird, oder durch einen Aufruf des Temperatur-Tabs? Ergänzt ihr das mit der reduzierten Geschwindigkeit auch noch beim Barometer Bricklet, wenn es für die Temperatur hilft und ich lieb darum bitte? André
×
×
  • Create New...