Jump to content

André K.

Members
  • Gesamte Inhalte

    62
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von André K.

  1. Zum Thema Kalibrierung und der Frage was der "echte" Wert ist hat der YouTuber "Big Clive" mal ein interessantes Video gemacht, das Verfahren war mir bis dato nicht bekannt (und selbst getestet habe ich es auch nicht). André
  2. Daß es nicht direkt in der Sonne hängt macht vermutlich den Unterschied aus … seitdem es nicht mehr so ätzend heiß ist läuft es bei mir auch ziemlich stabil. André
  3. Ist das der Prozessor auf der Ethernet Extension? RED-Brick ist für mich ja uninteressant, weil nicht in Verwendung André
  4. Das ist richtig, da mein Gehäuse ja im Außenbereich hängt ist das aber "per Design" ohne Luftaustausch, denn es darf ja kein Wasser eindringen. Welcher Temperaturbereich wird den "offiziell" unterstützt? André
  5. Würde ich auch als wahrscheinlich ansehen, bei mir traten jetzt bei den heißen Tagen die Ausfälle wie erwähnt schon bei unter 50°C im inneren auf. Wie misst Du die Temperatur im Gehäuse? Bei mir habe ich dafür ein ausrangiertes Temperature 1.0 Bricklet drin. André
  6. Danke für die Info! Bevor ich an dem einen Tag hingefahren bin habe ich noch ein paar Versuche mit Telnet unternommen, bis dann irgendwann auch da nur noch "Connection refused" kam und auch der Brick Viewer keine Verbindung mehr aufbauen konnte. Ich schätze, daß einer der Master-Bricks ausgestiegen ist. In den Tagen danach, als es wieder so heiß war, ist der Stapel noch zwei Mal komplett ausgefallen, jedes Mal so um die 50°C gemessener Innentemperatur herum. Da scheint dann also so etwa die Grenze zu sein. Wenn es sich auf ein paar Tage im Jahr beschränkt werde ich damit leben müssen … die alte Conrad-Telemetrie-Wetterstation die über 20 Jahre dort in einem viel kleineren Gehäuse hing hat das übrigens klaglos mitgemacht André
  7. Ich krame diesen Thread mal hervor … Meine Erfahrung der letzten Tage ist, daß es ab 45°C anscheinend kritisch wird. Was natürlich für eine Wetterstation irgendwie blöd ist, aber da muß ich mir wohl was einfallen lassen wie ich das löse. Vielleicht kann jemand vom Tinkerforge-Team aber nochmal was "Offizielles" dazu sagen. André
  8. Bin gestern übrigens doch noch vor Ort gefahren und hab den Stecker kurz gezogen. Dabei ist auch zum ersten mal eine "unhandled enumeration" vorgekommen, das Logging funktioniert also grundsätzlich. Für welchen Betriebs-Temperaturbereich ist der Master-Brick und die Ethernet-Extension eigentlich ausgelegt? Nicht daß ich da zu großzügig bin … ich hab das alte Temperature-Bricklet ja in den grauen Kasten verfrachtet und zuletzt hatte es 49°C gemeldet. Viel, aber noch nicht kritisch, oder doch? André
  9. Es nimmt kein Ende … heute Morgen ist wieder das eine Bricklet ausgestiegen, und noch bevor ich jetzt daheim war hat es um kurz vor vier anscheinend den ganzen Stapel zerlegt. Der Brick Viewer connected sich, aber zeigt nix an. Auf Ping antwortet es noch. Was kann ich noch tun, außer zum Haus meiner Eltern zu fahren und das Netzwerkkabel zu ziehen? Zu dumm daß der Switch nicht gemanaged werden kann, sonst hätte ich ja kurz PoE abdrehen können, sowas fällt einem immer erst hinterher ein … André
  10. Das könnte etwas schwierig werden 😂 Aber ich hoffe Du lässt es noch etwas laufen, hier dauert es ja auch manchmal Tagelang. Und ich meine, eines hat sich seit dem Einspielen der Test-FW ja auch geändert, nämlich daß per Getter nicht immer derselbe Wert geliefert wird. André
  11. Ah OK … wie gesagt, seit dem 22. Juli sollte ich das mitbekommen. Wirklich testen konnte ich es ja nicht, aber der else-Zweig ist ja so simpel, der sollte funktionieren … Ich würde also eher mal tippen daß etwas anderes passiert als ein "sauberer" Reboot. Deutet dieser eine gezählte Fehler auf nichts hin? Und was hat Dein Versuchsaufbau ergeben? André
  12. Von wem wird die denn angestoßen, vom Master? Und wie bekommt der das mit — senden die Bricklets beim „Booten“ eine entsprechende Nachricht? Bis jetzt läuft übrigens alles noch normal … André
  13. Update 😅 Diesmal hat es nur 15 Minuten gedauert bis zum erneuten Auftreten … gleiches Bild, Callback-Config "vergessen" aber jetzt wurde ein "error_count_frame" gezählt: Error status: array(4) { ["error_count_ack_checksum"]=> int(0) ["error_count_message_checksum"]=> int(0) ["error_count_frame"]=> int(1) ["error_count_overflow"]=> int(0) } André
  14. Habe ich jetzt mal gemacht, mit (für mich) durchaus überraschendem Ergebnis: Per getter erhalte ich tatsächlich einen plausiblen Wert, der sich auch von Aufruf zu Aufruf geringfügig ändert. Aber: Das Bricklet hat anscheinend die Callback-Config vergessen, und auch die Status-LED-Config ist auf dem Defaultwert 3. Das hier ist das komplette Test-Skript: require_once('Tinkerforge/IPConnection.php'); require_once('Tinkerforge/BrickletTemperatureV2.php'); use Tinkerforge\IPConnection; use Tinkerforge\BrickletTemperatureV2; const HOST = '192.168.1.105'; const PORT = 4223; const UID = 'KEv'; // Change XYZ to the UID of your Temperature Bricklet 2.0 $ipcon = new IPConnection(); // Create IP connection $t = new BrickletTemperatureV2(UID, $ipcon); // Create device object $ipcon->connect(HOST, PORT); // Connect to brickd // Get current temperature $temperature = $t->getTemperature(); echo "Temperature: " . $temperature/100.0 . " °C\n"; echo "Callback configuration:\n"; $conf = $t->getTemperatureCallbackConfiguration(); var_dump($conf); echo "LED status:\n"; $led_status = $t->getStatusLEDConfig(); var_dump($led_status); echo "Error status:\n"; $error_status = $t->getSPITFPErrorCount(); var_dump($error_status); echo "Press key to exit\n"; fgetc(fopen('php://stdin', 'r')); $ipcon->disconnect(); Und das hier die komplette Ausgabe: Temperature: 24.5 °C Callback configuration: array(5) { ["period"]=> int(0) ["value_has_to_change"]=> bool(false) ["option"]=> string(1) "x" ["min"]=> int(0) ["max"]=> int(0) } LED status: int(3) Error status: array(4) { ["error_count_ack_checksum"]=> int(0) ["error_count_message_checksum"]=> int(0) ["error_count_frame"]=> int(0) ["error_count_overflow"]=> int(0) } Press key to exit So, und nachdem ich mich anschließend via Brick-Viewer verbunden habe (und damit die Enumeration getriggert habe) kamen auch sofort wieder Callbacks an, ohne zusätzlichen Reset. Und das kleine PHP-Skript hat dann auch die korrekte Callback-Config geliefert: Callback configuration: array(5) { ["period"]=> int(1000) ["value_has_to_change"]=> bool(true) ["option"]=> string(1) "x" ["min"]=> int(0) ["max"]=> int(0) } LED status: int(0) Ich hoffe, mit diesen Infos kannst Du was anfangen. André
  15. Bislang kein einziges Mal, weder im Syslog noch in der Datenbank. Dieser else-Zweig ist allerdings erst seit der Version vom 22. Juli drin. Übrigens, während wir hier schreiben ist es wieder aufgetreten bzw. heute morgen um kurz vor 10, ich hab da so eine interne Statusseite auf der ich nachsehen kann wann zuletzt was eingetrudelt ist: ("Temperatur 2" ist übrigens der Wert vom Humidity-Bricklet) Soll ich noch irgendwas spezielles testen, bevor ich gleich per Brick-Viewer drauf gehe? André
  16. Nee, Callbacks gab es (wie zuvor auch) keine mehr, das Bricklet ist quasi "verstummt" so als ob sich die Temperatur nicht ändern würde. Dies ist meine kompletter Enumerate-Callback-Handler, es fehlen lediglich die CASEs für die ganzen anderen Bricklets: 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 TEMPERATURE_V2_DEVICE_IDENTIFIER: if (cfg_dumpmode) printf("Found %s with UID=%s\n", TEMPERATURE_V2_DEVICE_DISPLAY_NAME, uid); /* Wurde der Speicher noch nicht allokiert? */ if (bl_thermo_v2 == NULL) bl_thermo_v2 = new TemperatureV2; else temperature_v2_destroy(bl_thermo_v2); temperature_v2_create(bl_thermo_v2, uid, &bd_conn); /* Status-LED ausschalten: */ temperature_v2_set_status_led_config(bl_thermo_v2, TEMPERATURE_V2_STATUS_LED_CONFIG_OFF); /* Callback für Temperatur: 1s */ temperature_v2_register_callback(bl_thermo_v2, TEMPERATURE_V2_CALLBACK_TEMPERATURE, (void (*)(void))cb_temperature, NULL); temperature_v2_set_temperature_callback_configuration(bl_thermo_v2, 1000, true, TEMPERATURE_V2_THRESHOLD_OPTION_OFF, 0, 0); break; default: if (cfg_dumpmode) printf("Found other Device: DID=%d UID=%s\n", did, uid); break; } else { /* Nicht behandelte Aufzählung loggen: */ packet_enqueue(VALUE_EVENT, EV_UNHANDLED_ENUM); syslog(LOG_INFO, "Unhandled enumeration: type=%i DID=%d UID=%s", enume_type, did, uid); } } Könnte das Beeinflussen der LED was bewirkt haben? André
  17. Heute Morgen ist der Fehler wieder aufgetreten … Anders als die letzten Male reichte jetzt aber ein Connect vom Brick-Viewer, um das Bricklet wieder zum Leben zu erwecken. Ich musste also nicht auf den Reset-Button klicken. Ob es wirklich der Brick-Viewer war, oder mein Daemon (der ja jedes Mal eine Initialisierung vornimmt wenn ein ENUMERATE angestoßen wurde, was beim Connect vom Viewer ja passiert) kann ich natürlich nicht genau sagen … André
  18. Hat funktioniert, nachdem das Problem heute Mittag wieder aufgetreten war — irgendwie häuft es sich … aber dann sehen wir wenigstens, ob es eine Besserung bringt. PS: Hab das Update tatsächlich ohne vorigen Reset des Bricklets eingespielt, danach war es dann auch wieder "lebendig". André
  19. Vielen Dank, werde ich gleich morgen einspielen! Muß ich das File erst noch entpacken? "zbin" klingt so als ob das durch gzip gelaufen ist ... André
  20. Vorhin ist es wieder aufgetreten, ich hab mal ein kurzes Bildschirmvideo gemacht ... nach dem Reset verschwindet das Bricklet aus der Liste, nachdem man sich neu verbindet ist es dann wieder zu sehen und arbeitet auch normal. (Video ist etwas klein geraten, ich hoffe man erkennt es trotzdem) ausfall_20200719.mov
  21. Das will ich nicht ganz ausschließen, und so ganz habe ich das mit dem Reset eh noch nicht durchschaut. Es ist ja auf jedem Tab ein eigener Reset-Button vorhanden, aber mein Eindruck ist, daß immer der ganze Stapel resettet wird. Kann das sein? Also daß es quasi egal ist, wo man den Button drückt? Ich poste einfach mal den relevanten Teil aus dem Quelltext: temperature_v2_create(bl_thermo_v2, uid, &bd_conn); /* Status-LED ausschalten: */ temperature_v2_set_status_led_config(bl_thermo_v2, TEMPERATURE_V2_STATUS_LED_CONFIG_OFF); /* Callback für Temperatur: 1s */ temperature_v2_register_callback(bl_thermo_v2, TEMPERATURE_V2_CALLBACK_TEMPERATURE, (void (*)(void))cb_temperature, NULL); temperature_v2_set_temperature_callback_configuration(bl_thermo_v2, 1000, true, TEMPERATURE_V2_THRESHOLD_OPTION_OFF, 0, 0); Schon mal vielen Dank! André
  22. Gestern Abend ist der Fall wieder passiert … Leider hatte ich unterdessen noch keine Zeit, die Ergänzung in meinen Daemon einzubauen. Aber ich bin mir gar nicht mehr sicher, ob ein Spontan-Reset überhaupt der Grund sein kann. Wie es sich gestern geäußert hat: Das Temperature-Bricklet 2.0 hat gegen kurz nach 20 Uhr, wie beim letzten Vorfall im Juni auch, einfach keine neuen Werte mehr geliefert, der zuletzt gelieferte Wert war 20,6°C. Gegen 23:30 Uhr ist es mir dann aufgefallen. Ich habe mich dann per Brick-Viewer aufgeschaltet. Der Graph auf dem Tab des Temperetaure-Bricklets wurde wie gewohnt Stück für Stück gezeichnet, allerdings als Gerade, und mit besagten 20,6°C. Der Brick-Viewer fragt doch per getter ab, oder? Es brauchte zwei Resets, bis es wieder da war, und die zu dieser Zeit korrekte Temperatur von irgendwas bei 10 Grad anzeigte. Kann das dann überhaupt der vermutete spontane Reset sein? André
  23. 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é
  24. 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é
  25. 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é
×
×
  • Neu erstellen...