{"id":135829,"date":"2018-11-02T10:55:00","date_gmt":"2018-11-02T08:55:00","guid":{"rendered":"https:\/\/ruuvi.com\/ruuvi-firmware-teil-15-watchdog\/"},"modified":"2026-06-11T08:48:56","modified_gmt":"2026-06-11T05:48:56","slug":"ruuvi-firmware-teil-15-watchdog","status":"publish","type":"post","link":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/","title":{"rendered":"Ruuvi Firmware \u2013 Teil 15: Watchdog"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15-1024x535.jpeg\" alt=\"Einleitungsbild zur Ruuvi Firmware-Serie Teil 15\" class=\"wp-image-3912\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15-1024x535.jpeg 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15-450x235.jpeg 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15-768x401.jpeg 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15-600x314.jpeg 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">In diesem Teil des Tutorials richten wir einen Watchdog-Timer ein, um unseren Tag zur\u00fcckzusetzen, falls das Programm \u201eeinfriert\u201c. Der fertige Code dieses Blogbeitrags kann bei <a href=\"https:\/\/github.com\/ruuvi\/ruuvi.firmware.c\">Ruuvi GitHub<\/a> im <em>ruuviblog<\/em>-Branch, Tag <em>3.15.0-alpha<\/em>, heruntergeladen werden. <\/p>\n\n<p class=\"wp-block-paragraph\">Bitte folge <a href=\"https:\/\/ruuvi.com\/ruuvi-firmware-part-1-sleep\/\">Teil 1 der Serie<\/a> f\u00fcr Details zum Klonen des Repositories und Kompilieren des Codes. Die finale Hex-Datei dieses Tutorials kann vom <a href=\"http:\/\/jenkins.ruuvi.com:8080\/job\/ruuvi.firmware.c\/40\/\">Ruuvi Jenkins<\/a> heruntergeladen werden. <\/p>\n\n<h2 class=\"wp-block-heading\">Watchdog-Timer<\/h2>\n\n<p class=\"wp-block-paragraph\"><em>\u201eEin Watchdog-Timer (WDT) ist ein Hardware-Timer, der automatisch einen System-Reset ausl\u00f6st, wenn das Hauptprogramm es vers\u00e4umt, ihn regelm\u00e4\u00dfig zu bedienen. Er wird h\u00e4ufig verwendet, um ein eingebettetes Ger\u00e4t automatisch zur\u00fcckzusetzen, das aufgrund eines Software- oder Hardwarefehlers h\u00e4ngen bleibt.\u201c \u2014<\/em><a href=\"https:\/\/os.mbed.com\/cookbook\/WatchDog-Timer\"><em> MBED<\/em><\/a><\/p>\n\n<p class=\"wp-block-paragraph\">Da unser Programm immer komplexer wird, steigt auch die Anzahl der Bugs in der Firmware. Selbst wenn wir perfekten Code schreiben w\u00fcrden, k\u00f6nnten externe Einfl\u00fcsse wie ein Spannungseinbruch oder ein extremes Nahfeldkommunikations-Feld (<strong>NFC<\/strong>) dazu f\u00fchren, dass unser Programm blockiert. <\/p>\n\n<p class=\"wp-block-paragraph\">Noch schlimmer als die blo\u00dfe Funktionsunf\u00e4higkeit ist, dass ein eingefrorener Tag seine Batterie innerhalb weniger Tage leeren k\u00f6nnte. Der Watchdog ist unsere letzte Verteidigungslinie gegen solche Fehler. <\/p>\n\n<h2 class=\"wp-block-heading\">Watchdog-Schnittstelle<\/h2>\n\n<p class=\"wp-block-paragraph\">Einfach ist gut. Wenn es um den Watchdog geht, wollen wir die Komplexit\u00e4t auf einem absoluten Minimum halten. Wir definieren zwei Funktionen: Initialisierung und Feed. Die Initialisierung nimmt die Anzahl der Millisekunden, bevor der Watchdog-Timer einen Reset ausl\u00f6st, als Parameter entgegen, und Feed hat gar keinen Parameter \u2013 es setzt lediglich den Watchdog-Timer zur\u00fcck.   <\/p>\n\n<pre class=\"wp-block-code\"><code>\/**\n * Initializes watchdog module.\n * After initialization watchdog must be fed at given interval or the program will reset.\n * There is not way to uninitialize the watchdog.\n * Consider bootloader watchdog interval on setup.\n *\n * parameter interval: how often the watchdog should be fed.\n *\n * Return RUUVI_DRIVER_SUCCESS on success, error code on failure.\n *\/\nruuvi_driver_status_t ruuvi_interface_watchdog_init(uint32_t interval);\n\n\/**\n * \"Feed\" the watchdog, resets the watchdog timer.\n * This must be called after watchdog initialization or the program will reset.\n *\/\nruuvi_driver_status_t ruuvi_interface_watchdog_feed(void);<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/gist.githubusercontent.com\/ojousima\/f34c5a8ec5ad92dd3a5ddae56c3050ee\/raw\/12b49babda055fd7764ce2123e0858089b794fde\/ruuvi.firmware.c_watchdog_interface.h\">Rohdaten anzeigen<\/a><\/p>\n\n<h2 class=\"wp-block-heading\">Watchdog-Treiber<\/h2>\n\n<p class=\"wp-block-paragraph\">Die Implementierung der Schnittstellenfunktionen ist einfach genug: Wir kapseln Aufrufe an das Nordic SDK.<\/p>\n\n<pre class=\"wp-block-code\"><code>nrf_drv_wdt_channel_id m_channel_id;\n\n\/**\n * @brief WDT events handler.\n *\/\nvoid wdt_event_handler(void)\n{\n    \/\/ NOTE: The max amount of time we can spend in WDT interrupt is two cycles of 32768&#091;Hz] clock\n    \/\/ - after that, reset occurs\n}\n\n\/**\n * Initializes watchdog module.\n * After initialization watchdog must be fed at given interval or the program will reset.\n * There is not way to uninitialize the watchdog.\n * Consider bootloader watchdog interval on setup.\n *\n * parameter interval: how often the watchdog should be fed.\n *\n * Return RUUVI_DRIVER_SUCCESS on success, error code on failure.\n *\/\nruuvi_driver_status_t ruuvi_interface_watchdog_init(uint32_t interval)\n{\n  uint32_t err_code = NRF_SUCCESS;\n  nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG;\n  config.reload_value = interval;\n  err_code = nrf_drv_wdt_init(&amp;config, wdt_event_handler);\n  err_code = nrf_drv_wdt_channel_alloc(&amp;m_channel_id);\n  nrf_drv_wdt_enable();\n  return ruuvi_platform_to_ruuvi_error(&amp;err_code);\n}\n\n\/**\n * \"Feed\" the watchdog, resets the watchdog timer.\n * This must be called after watchdog initialization or the program will reset.\n *\/\nruuvi_driver_status_t ruuvi_interface_watchdog_feed(void)\n{\n  nrf_drv_wdt_channel_feed(m_channel_id);\n  return RUUVI_DRIVER_SUCCESS;\n}<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/gist.githubusercontent.com\/ojousima\/ac733866e6878d01849c59e67c20659a\/raw\/f79688680bd100ae8b5677a7ca82d48047c44275\/ruuvi.firmare.c_watchdog.c\">Rohdaten anzeigen<\/a><\/p>\n\n<p class=\"wp-block-paragraph\">Ein wichtiger Fallstrick ist die Interrupt-Priorit\u00e4tsstufe \u2013 wenn das Programm mit einer h\u00f6heren oder gleichen Priorit\u00e4t h\u00e4ngen bleibt wie unser Watchdog-Interrupt, w\u00fcrde der Interrupt nicht ausgef\u00fchrt werden. Wir w\u00e4hlen Stufe 2, die h\u00f6chste f\u00fcr die Anwendung verf\u00fcgbare Interrupt-Stufe, und verschieben den Bluetooth-Radio-Aktivit\u00e4ts-Interrupt nach unten auf Stufe 3. <\/p>\n\n<pre class=\"wp-block-code\"><code>\/\/ &lt;e&gt; NRFX_WDT_ENABLED - nrfx_wdt - WDT peripheral driver\n\/\/==========================================================\n#ifndef NRFX_WDT_ENABLED\n#define NRFX_WDT_ENABLED 1\n#endif\n\/\/ &lt;o&gt; NRFX_WDT_CONFIG_BEHAVIOUR  - WDT behavior in CPU SLEEP or HALT mode\n\n\/\/ &lt;1=&gt; Run in SLEEP, Pause in HALT\n\/\/ &lt;8=&gt; Pause in SLEEP, Run in HALT\n\/\/ &lt;9=&gt; Run in SLEEP and HALT\n\/\/ &lt;0=&gt; Pause in SLEEP and HALT\n\n#ifndef NRFX_WDT_CONFIG_BEHAVIOUR\n#define NRFX_WDT_CONFIG_BEHAVIOUR 1\n#endif\n\n\/\/ Default WDT reset interval in ms\n#ifndef NRFX_WDT_CONFIG_RELOAD_VALUE\n#define NRFX_WDT_CONFIG_RELOAD_VALUE 12000\n#endif\n\n#ifndef NRFX_WDT_CONFIG_IRQ_PRIORITY\n#define NRFX_WDT_CONFIG_IRQ_PRIORITY 2\n#endif<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/gist.githubusercontent.com\/ojousima\/e99a004c6d40aac09692559367b1fcc1\/raw\/b98f1e87d5d05ebf87ce520d86737891ee3e38dc\/ruuvi.firmware.c_watchdog_config.h\">Rohdaten anzeigen<\/a><\/p>\n\n<h2 class=\"wp-block-heading\">Testen<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir werden keinen separaten <em>task_watchdog<\/em> erstellen, sondern initialisieren den Watchdog standardm\u00e4\u00dfig beim Booten. Wenn wir Unit-Tests ausf\u00fchren, wird der Watchdog erst nach Abschluss der Unit-Tests initialisiert, da die Tests recht viel Zeit in Anspruch nehmen k\u00f6nnen. <\/p>\n\n<p class=\"wp-block-paragraph\">F\u00fcr die Zwecke des Tests f\u00fcttern wir den Watchdog nur bei Tastendruck \u2013 wenn die Taste nicht alle 12 Sekunden gedr\u00fcckt wird, wird der Tag zur\u00fcckgesetzt.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"494\" height=\"503\" src=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal-view.png\" alt=\"FIFO-Lesevorg&#xE4;nge aus unserer vorherigen Version\" class=\"wp-image-3925\" srcset=\"https:\/\/ruuvi.com\/i\/u\/debug-terminal-view.png 494w, https:\/\/ruuvi.com\/i\/u\/debug-terminal-view-442x450.png 442w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Wir k\u00f6nnen sehen, wie die FIFO-Lesevorg\u00e4nge aus unserer vorherigen Version ausgef\u00fchrt werden, wobei der letzte gedruckte Zeitstempel bei 11777 ms liegt. Dann wird der Tag zur\u00fcckgesetzt und die Selbsttests laufen erneut ab. Diesmal f\u00fcttern wir den Watchdog zweimal; unser Tag wird erst zur\u00fcckgesetzt, wenn wir die Watchdog-Zeit ablaufen lassen. <\/p>\n\n<h2 class=\"wp-block-heading\">Leistungsprofilierung<\/h2>\n\n<p class=\"wp-block-paragraph\">Im letzten Teil der Serie blieben wir bei einem etwas hohen Verbrauch von 29,4 <em>\u03bcA<\/em> stehen. Schauen wir uns an, wie unser Profil durch den Watchdog-Timer beeinflusst wird.<\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"593\" src=\"https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-1024x593.png\" alt=\"Vom Watchdog-Timer beeinflusstes Leistungsprofil\" class=\"wp-image-3926\" srcset=\"https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-1024x593.png 1024w, https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-450x261.png 450w, https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-768x445.png 768w, https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-1536x890.png 1536w, https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-2048x1186.png 2048w, https:\/\/ruuvi.com\/i\/u\/power-consumption-profile-600x348.png 600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Der Verbrauch liegt nun bei 29,7 <em>\u03bcA<\/em>, also 0,3 <em>\u03bcA<\/em> h\u00f6her als zuvor. Dies liegt innerhalb der Fehlertoleranz der Messung; in jedem Fall k\u00f6nnen wir feststellen, dass der Anstieg des Stromverbrauchs geringf\u00fcgig ist. <\/p>\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir haben nun eine Watchdog-Funktionalit\u00e4t zu unseren Tags hinzugef\u00fcgt und damit die Zuverl\u00e4ssigkeit der RuuviTags im Einsatz weiter verbessert.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Bleib dran und folge <\/strong><a href=\"https:\/\/twitter.com\/ojousima\"><strong>@ojousima<\/strong><\/a><strong> und <\/strong><a href=\"https:\/\/twitter.com\/ruuvicom\"><strong>@ruuvicom<\/strong><\/a><strong> auf Twitter f\u00fcr #FirmwareFriday-Beitr\u00e4ge!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Teil des Tutorials richten wir einen Watchdog-Timer ein, um unseren Tag zur\u00fcckzusetzen, falls das Programm \u201eeinfriert\u201c. Der fertige Code dieses Blogbeitrags kann bei Ruuvi GitHub im ruuviblog-Branch, Tag 3.15.0-alpha, heruntergeladen werden. Bitte folge Teil 1 der Serie f\u00fcr Details zum Klonen des Repositories und Kompilieren des Codes. Die finale Hex-Datei dieses Tutorials kann [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":135832,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[],"class_list":["post-135829","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruuvi-software-artikel"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ruuvi Firmware \u2013 Teil 15: Watchdog \u2013 Ruuvi<\/title>\n<meta name=\"description\" content=\"Hinzuf\u00fcgen eines Watchdog-Timers und Codierung der Watchdog-Schnittstelle, w\u00e4hrend die Code-Komplexit\u00e4t der Firmware auf einem absoluten Minimum gehalten wird.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruuvi Firmware \u2013 Teil 15: Watchdog \u2013 Ruuvi\" \/>\n<meta property=\"og:description\" content=\"Hinzuf\u00fcgen eines Watchdog-Timers und Codierung der Watchdog-Schnittstelle, w\u00e4hrend die Code-Komplexit\u00e4t der Firmware auf einem absoluten Minimum gehalten wird.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruuvi\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ruuvi.cc\" \/>\n<meta property=\"article:published_time\" content=\"2018-11-02T08:55:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T05:48:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"669\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Otso Jousimaa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:site\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Otso Jousimaa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/\"},\"author\":{\"name\":\"Otso Jousimaa\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"headline\":\"Ruuvi Firmware \u2013 Teil 15: Watchdog\",\"datePublished\":\"2018-11-02T08:55:00+00:00\",\"dateModified\":\"2026-06-11T05:48:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/\"},\"wordCount\":539,\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-15.jpeg\",\"articleSection\":[\"Ruuvi-Software-Artikel\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/\",\"name\":\"Ruuvi Firmware \u2013 Teil 15: Watchdog \u2013 Ruuvi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-15.jpeg\",\"datePublished\":\"2018-11-02T08:55:00+00:00\",\"dateModified\":\"2026-06-11T05:48:56+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"description\":\"Hinzuf\u00fcgen eines Watchdog-Timers und Codierung der Watchdog-Schnittstelle, w\u00e4hrend die Code-Komplexit\u00e4t der Firmware auf einem absoluten Minimum gehalten wird.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-15.jpeg\",\"contentUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-series-part-15.jpeg\",\"width\":1280,\"height\":669,\"caption\":\"Einleitungsbild zur Ruuvi Firmware-Serie Teil 15\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-15-watchdog\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/front\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruuvi Firmware \u2013 Teil 15: Watchdog\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/\",\"name\":\"Ruuvi\",\"description\":\"Measure Your World\",\"potentialAction\":[],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\",\"name\":\"Otso Jousimaa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"caption\":\"Otso Jousimaa\"},\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/author\\\/ojousima\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ruuvi Firmware \u2013 Teil 15: Watchdog \u2013 Ruuvi","description":"Hinzuf\u00fcgen eines Watchdog-Timers und Codierung der Watchdog-Schnittstelle, w\u00e4hrend die Code-Komplexit\u00e4t der Firmware auf einem absoluten Minimum gehalten wird.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/","og_locale":"de_DE","og_type":"article","og_title":"Ruuvi Firmware \u2013 Teil 15: Watchdog \u2013 Ruuvi","og_description":"Hinzuf\u00fcgen eines Watchdog-Timers und Codierung der Watchdog-Schnittstelle, w\u00e4hrend die Code-Komplexit\u00e4t der Firmware auf einem absoluten Minimum gehalten wird.","og_url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/","og_site_name":"Ruuvi","article_publisher":"https:\/\/www.facebook.com\/ruuvi.cc","article_published_time":"2018-11-02T08:55:00+00:00","article_modified_time":"2026-06-11T05:48:56+00:00","og_image":[{"width":1280,"height":669,"url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg","type":"image\/jpeg"}],"author":"Otso Jousimaa","twitter_card":"summary_large_image","twitter_creator":"@ruuvicom","twitter_site":"@ruuvicom","twitter_misc":{"Verfasst von":"Otso Jousimaa","Gesch\u00e4tzte Lesezeit":"5\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#article","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/"},"author":{"name":"Otso Jousimaa","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"headline":"Ruuvi Firmware \u2013 Teil 15: Watchdog","datePublished":"2018-11-02T08:55:00+00:00","dateModified":"2026-06-11T05:48:56+00:00","mainEntityOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/"},"wordCount":539,"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg","articleSection":["Ruuvi-Software-Artikel"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/","url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/","name":"Ruuvi Firmware \u2013 Teil 15: Watchdog \u2013 Ruuvi","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#primaryimage"},"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg","datePublished":"2018-11-02T08:55:00+00:00","dateModified":"2026-06-11T05:48:56+00:00","author":{"@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"description":"Hinzuf\u00fcgen eines Watchdog-Timers und Codierung der Watchdog-Schnittstelle, w\u00e4hrend die Code-Komplexit\u00e4t der Firmware auf einem absoluten Minimum gehalten wird.","breadcrumb":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#primaryimage","url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg","contentUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-series-part-15.jpeg","width":1280,"height":669,"caption":"Einleitungsbild zur Ruuvi Firmware-Serie Teil 15"},{"@type":"BreadcrumbList","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-15-watchdog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruuvi.com\/de\/front\/"},{"@type":"ListItem","position":2,"name":"Ruuvi Firmware \u2013 Teil 15: Watchdog"}]},{"@type":"WebSite","@id":"https:\/\/ruuvi.com\/de\/#website","url":"https:\/\/ruuvi.com\/de\/","name":"Ruuvi","description":"Measure Your World","potentialAction":[],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00","name":"Otso Jousimaa","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","caption":"Otso Jousimaa"},"url":"https:\/\/ruuvi.com\/de\/author\/ojousima\/"}]}},"_links":{"self":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/comments?post=135829"}],"version-history":[{"count":1,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135829\/revisions"}],"predecessor-version":[{"id":135841,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135829\/revisions\/135841"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media\/135832"}],"wp:attachment":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media?parent=135829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/categories?post=135829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/tags?post=135829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}