{"id":697,"date":"2013-09-13T09:17:12","date_gmt":"2013-09-13T07:17:12","guid":{"rendered":"http:\/\/willem.aandewiel.nl\/?p=697"},"modified":"2013-09-13T09:17:12","modified_gmt":"2013-09-13T07:17:12","slug":"shutdown-headless-raspberry-pi","status":"publish","type":"post","link":"https:\/\/willem.aandewiel.nl\/index.php\/2013\/09\/13\/shutdown-headless-raspberry-pi\/","title":{"rendered":"Shutdown Headless Raspberry Pi"},"content":{"rendered":"<p><!-- Plaatje Productie --><br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Ready4Prod.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Ready4Prod.jpg\" alt=\"Ready4Prod\" width=\"150\" class=\"alignleft size-full wp-image-216\" \/><\/a><br \/>\n<!-- Inleidende tekst --><br \/>\nEen modern Operating System (OS) vindt het niet prettig als het niet netjes wordt afgesloten voordat de computer wordt uitgezet. Voor computers met een beeldscherm en toetsenbord is dat niet zo&#8217;n probleem. Bij een systeem met een grafische interface is het vaak zelfs een kwestie van &#8220;<em>op de juiste knop klikken<\/em>&#8220;.<br \/>\nAls de computer echter geen beeldscherm en\/of toetsenbord heeft, zoals een Raspberry Pi (RPi) die als server ergens in een donker hoekje zijn &#8216;<em>ding doet<\/em>&#8216;, wordt het een stuk lastiger. De enige manier is dan om met SSH in te loggen en het &#8220;shutdown&nbsp;-h&nbsp;now&#8221; (of gewoon het &#8220;halt&#8221;) commando in te toetsen.<br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/index.php\/shutdown-headless-raspberry-pi-english\/\" title=\"Shutdown Headless Raspberry Pi (English)\">Here<\/a> you will find an English translation.<br \/>\nIn deze post beschrijf ik een manier om met twee drukknopjes, vier weerstandjes, \u00e9\u00e9n LED en een stukje software, de RPi netjes af te sluiten of eventueel te resetten.<!--more--><\/p>\n<p \/>\nVoor dit &#8216;<em>projectje<\/em>&#8216; wordt gebruik gemaakt van twee General Purpose Input\/Output (GPIO) poorten van de RPi. Dit zijn poorten die, via een softwarematige instelling, kunnen worden ingesteld als een Input \u00f3f als een Output poort. De RPi heeft een aantal van dit soort poorten. Deze bevinden zich op de P1 connector, maar er zitten er op het Rev.2 board ook vier (GPIO28, 29, 30 en 31) op de P5 connector. De P5 connector moet je dan zelf nog even op de RPi solderen. Omdat ik van plan ben de P1 connector nog voor andere uitbreidingen te gaan gebruiken heb ik ervoor gekozen om een connector op de P5 plek te solderen en die te gebruiken. Wil je dat niet doen dan moet je in de software aangeven welke GPIO poorten je w\u00e9l wilt gebruiken.<br \/>\n<!-- RPI met lijnen om P1, P5 en P6 --><br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/RaspberryPi.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/RaspberryPi.jpg\" alt=\"RaspberryPi\" width=\"2872\" height=\"2044\" class=\"alignnone size-full wp-image-717\" \/><\/a><br \/>\nOp de Rev.2 boards van de RPi is er ook plaats voor een connector waarmee de RPi ge-reset kan worden of waarmee hij, na een &#8216;shutdown -h now&#8217; commando, weer gestart kan worden. Hiervoor moet een P6 connector op de RPi worden gesoldeerd. Door pin 1 (het &#8216;vierkante&#8217; eilandje op het plaatje) &#8216;laag&#8217; te maken (verbinden met &#8216;aarde&#8217;) zal de RPi opnieuw opstarten.<br \/>\n<!-- Basis gebruik GPIO poort --><br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/GPIO_IN.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/GPIO_IN.jpg\" alt=\"GPIO_IN\" width=\"320\" height=\"240\" class=\"alignright size-full wp-image-681\" \/><\/a><br \/>\nEr zijn twee manieren om een schakelaar op een als Input gedefinieerde GPIO poort aan te sluiten. In het linker voorbeeld hiernaast is de rust toestand van de gebruikte GPIO poort &#8216;hoog&#8217; (oftewel +3.3V). Dit komt door de weerstand van 10K ohm die de poort naar +3.3V trekt (dit is een zgn. Pull-Up weerstand). Wordt op de schakelaar gedrukt, dan wordt de poort &#8216;laag&#8217; (GND). De extra weerstand in serie met de GPIO poort is strikt genomen niet nodig, maar zorgt ervoor dat een, per ongeluk als Output poort gedefinieerde GPIO poort, niet direct de geest zal geven.<br \/>\nIn het rechter voorbeeld is de rust toestand van de gebruikte GPIO poort &#8216;laag&#8217; (oftewel GND, 0V). Dit komt door de weerstand van 10K ohm die de poort naar GND trekt (dit is een zgn. Pull-Down weerstand). Wordt op de schakelaar gedrukt, dan wordt de poort &#8216;hoog&#8217; (+3.3V). Ook hier dient de extra weerstand in serie met de GPIO poort als extra beveiliging voor het geval deze als Output poort gedefinieerde is.<br \/>\n<br \/>\n<!-- Schema zonder LED --><br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Schema01.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Schema01.jpg\" alt=\"Schema01\" width=\"300\" class=\"alignleft size-full wp-image-692\" \/><\/a><br \/>\nHiernaast het schema waarmee, met wat software, de RPi netjes kan worden afgesloten. Bij mij heeft de waarschuwing: &#8220;<em>Pas op: Niet op deze knop drukken<\/em>&#8221; altijd het effect dat ik juist w\u00e9l op die knop wil drukken. Daarom heb ik de reset knop in serie met de Shutdown knop geschakeld en heb ik voor de GPIO-Input poort de &#8220;<em>in rust &#8216;hoog&#8217;<\/em>&#8221; variant gebruikt. Pin 1 van P6 wordt dan alleen &#8216;laag&#8217; als de twee drukknoppen gelijktijdig worden ingedrukt.<br \/>\n<!-- Ticks Tellen --><br \/>\nOmdat je niet wilt dat de RPi bij het &#8216;<em>per ongeluk indrukken<\/em>&#8216; van de Shutdown knop direct het &#8216;Shutdown -h now&#8217; commando uitvoert, wordt dit commando pas na het voor langere tijd ingedrukt houden van de knop uitgevoerd (in de software instelbaar, standaard tussen de vier en zes seconden).<br \/>\n<!-- Plaatje Testopstelling, zonder LED --><br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Test01a.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Test01a.jpg\" alt=\"Test01a\" width=\"200\" class=\"alignright size-full wp-image-694\" \/><\/a><br \/>\nTijdens het testen van deze schakeling merkte ik dat het ontbreken van feedback over het functioneren van de schakeling en de software niet prettig is. Door een LED, die door de software wordt aangestuurd, in de schakeling op te nemen is het mogelijk om te zien in welke toestand de software zich bevindt. In rust en als de software &#8216;loopt&#8217; knippert de LED met een frequentie van 1 maal per twee seconden. Wordt de Shutdown knop ingedrukt, dan wordt de frequentie 4x per seconden. Is het Shutdown commando gegeven, dan brandt de LED constant.<br \/>\n<!-- definitief schema --><br \/>\nDit is het definitieve schema:<br \/>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/10\/GPIOshutdown.png\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/10\/GPIOshutdown.png\" alt=\"GPIOshutdown\" width=\"878\" class=\"alignright size-full wp-image-790\" \/><\/a><br \/>\nIk heb de onderdelen op een stukje experimenteer printplaat gesoldeerd (waarbij ik er achter kwam dat experimenteer printplaat met dubbelzijdige en door-gemetaliseerde eilandjes een stuk handiger werkt dan de enkelzijdige die ik gebruikt heb) waarbij het printje direct over de gebruikte rij pinnen van P5 en P6 valt.<br \/>\n<!-- Plaatjes printje --><\/p>\n<table>\n<tr valign=top>\n<td valign=top>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Proto01b.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Proto01b.jpg\" alt=\"Proto01b\" width=\"145\" class=\"aligncenter size-full wp-image-685\" \/><\/a>\n<\/td>\n<td valign=top>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Proto01a.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Proto01a.jpg\" alt=\"Proto01a\" width=\"145\" class=\"aligncenter size-full wp-image-684\" \/><\/a><\/p>\n<td valign=top>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Ready2Test2.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Ready2Test2.jpg\" alt=\"Ready2Test2\" width=\"145\" class=\"aligncenter size-full wp-image-688\" \/><\/a>\n<\/td>\n<td valign=top>\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Ready2Test1.jpg\"><img decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Ready2Test1.jpg\" alt=\"Ready2Test1\" width=\"145\" class=\"aligncenter size-full wp-image-687\" \/><\/a><br \/>\n<\/tr>\n<\/table>\n<p>Dit is het programma om het \u00e9\u00e9n en ander aan te sturen:<\/p>\n<pre class=\"lang:sh decode:true \" title=\"GPIOshutdown.sh\" >#!\/bin\/sh\n#-----------------------#\n#    GPIOshutdown.sh    #\n#-----------------------#\nBASENAME=<code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">basename ${0}<\/code>\nPIDFILE=\"\/var\/run\/${BASENAME%.sh}.pid\"\nif [ -f ${PIDFILE} ]; then\n    echo \"${BASENAME} allready running...\"\n    exit\nelse\n    echo ${$} &gt; ${PIDFILE}\nfi\n#\n# GPIO numbers should be from this list (P1)\n# 0, 1, 4, 7, 8, 9, 10, 11, 14, 15, 17, 18, 21, 22, 23, 24, 25\n#\n# GPIO numbers should be from this list (P5)\n# 29, 31\n#\n# Note that the GPIO numbers that you program here refer to the pins\n# of the BCM2835 and *not* the numbers on the pin header.\n# So, if you want to activate GPIO7 on the header you should be\n# using GPIO4 in this script. Likewise if you want to activate GPIO0\n# on the header you should be using GPIO17 here.\n#\nGPIO_IN=29        # Input - gebruik de poort die jij handig vindt\nGPIO_LED=31       # Ouput - gebruik de poort die jij handig vindt\n#\n# Set up GPIO_IN and set to Input\necho \"${GPIO_IN}\" &gt; \/sys\/class\/gpio\/export\necho \"in\" &gt; \/sys\/class\/gpio\/gpio${GPIO_IN}\/direction\n#\n# test of input hoog is, anders is er niets op\n# deze GPIO_IN aangesloten...\nI=0\nSW=<code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">cat \/sys\/class\/gpio\/gpio${GPIO_IN}\/value<\/code>\necho \"value GPIO_${GPIO_IN} is [${SW}]\"\nwhile [ ${SW} -eq 0 ];\ndo\n    I=$((I+1))\n    if [ ${I} -gt 10 ]; then\n        echo \"..pfff\"\n        echo \"GPIO_${GPIO_IN} niet aangesloten\"\n        rm -f ${PIDFILE}\n        exit\n    fi\n    SW=<code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">cat \/sys\/class\/gpio\/gpio${GPIO_IN}\/value<\/code>\n    echo -n \"${I}\"\n    sleep 1\ndone\n#\n# Set up GPIO_LED and set to output\necho \"${GPIO_LED}\" &gt; \/sys\/class\/gpio\/export\necho \"out\" &gt; \/sys\/class\/gpio\/gpio${GPIO_LED}\/direction\n#\nI=0        # Duur van de KeyPress (Ticks-Teller)\nLED=0      # LED Aan=1, Uit=0\nS=2        # Seconden sleep\nwhile true\ndo\n    sleep ${S}\n    #\n    if [ ${LED} -eq 1 ]; then\n        echo \"0\" &gt; \/sys\/class\/gpio\/gpio${GPIO_LED}\/value\n        LED=0\n    else\n        echo \"1\" &gt; \/sys\/class\/gpio\/gpio${GPIO_LED}\/value\n        LED=1\n    fi\n    #\n    SW=<code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">cat \/sys\/class\/gpio\/gpio${GPIO_IN}\/value<\/code>\n    if [ ${SW} -eq 0 ]\n    then\n        I=$((I+1))    # Tel het aantal Ticks dat de Key is ingedrukt\n        S=0.25        # KeyPress, dan 0.25 seconden sleep\n        echo -n \"${I}\"\n        if [ ${I} -gt 16 ]\n        then\n            echo \"...\"\n            echo \"Key pressed  for [${I}] ticks..\"\n            I=0\n            echo \"1\" &gt; \/sys\/class\/gpio\/gpio${GPIO_LED}\/value\n            # Clean up\n            echo \"${GPIO_IN}\" &gt; \/sys\/class\/gpio\/unexport\n            echo \"\/sbin\/shutdown -h now\"    # Gebruik dit om te testen\n#           \/sbin\/shutdown -h now           # Gebruik dit voor productie\n            rm -f ${PIDFILE}                # Verwijder PID file\n            sleep 5                         # Settle down..\n            exit\n        fi\n    else\n        I=0        # Toets is weer los gelaten, reset Ticks Teller\n        S=2        # Sleep weer op 2 seconden zetten\n    fi\ndone\n#\necho \"0\" &gt; \/sys\/class\/gpio\/gpio${GPIO_LED}\/value\n#\n# Clean up\necho \"${GPIO_IN}\" &gt; \/sys\/class\/gpio\/unexport\n#echo \"${GPIO_LED}\" &gt; \/sys\/class\/gpio\/unexport\n#\necho \"Done....\"\n#\n<\/pre>\n<p>Plaats deze code in &#8220;\/usr\/local\/bin\/GPIOshutdown.sh&#8221; en maak het executable:<br \/>\n<strong><code>sudo chmod +x \/usr\/local\/bin\/GPIOshutdown.sh<\/code><\/strong><br \/>\nOm het programma automatisch te starten bij het opstarten van je RPi zijn er verschillende mogelijkheden. Ik vind het prettig om het programma als &#8216;daemon&#8217; te draaien. Wil je dat ook, dan moet je de volgende code in &#8220;\/etc\/init.d\/GPIOshutdown&#8221; zetten:<\/p>\n<pre class=\"lang:sh decode:true \" title=\"\/etc\/init.d\/GPIOshutdown\" >\n#! \/bin\/sh\n### BEGIN INIT INFO\n# Provides:          GPIOshutdown\n# Required-Start:    $remote_fs $syslog\n# Required-Stop:     $remote_fs $syslog\n# Default-Start:     2 3 4 5\n# Default-Stop:      0 1 6\n# Short-Description: check if GPIO29 is low and shutdown the system\n# Description:       check if GPIO29 is low and shutdown the system\n#                    bla bla bla\n### END INIT INFO\n#\n# Author: Willem Aandewiel (Willem@Aandewiel.nl)\n#\n# Do NOT \"set -e\"\n#\n# PATH should only include \/usr\/* if it runs after the mountnfs.sh script\nPATH=\/sbin:\/usr\/sbin:\/bin:\/usr\/bin\nDESC=\"check GPIO input for LOW and halt the system\"\nNAME=GPIOshutdown\nDAEMON=\/usr\/local\/bin\/${NAME}.sh\nDAEMON_ARGS=\"\"\nPIDFILE=\/var\/run\/$NAME.pid\nSCRIPTNAME=\/etc\/init.d\/$NAME\n# Exit if the package is not installed\n[ -x \"$DAEMON\" ] || exit 0\n# Read configuration variable file if it is present\n[ -r \/etc\/default\/$NAME ] &amp;&amp; . \/etc\/default\/$NAME\n# Load the VERBOSE setting and other rcS variables\n. \/lib\/init\/vars.sh\n# Define LSB log_* functions.\n# Depend on lsb-base (&gt;= 3.2-14) to ensure that this file is present\n# and status_of_proc is working.\n. \/lib\/lsb\/init-functions\n#\n# Function that starts the daemon\/service\n#\ndo_start()\n{\n    # Return\n    #   0 if daemon has been started\n    #   1 if daemon was already running\n    #   2 if daemon could not be started\n    start-stop-daemon --start --quiet --background --pidfile $PIDFILE --nicelevel 19 --exec $DAEMON --test &gt; \/dev\/null \\\n        || return 1\n    start-stop-daemon --start --quiet --background --pidfile $PIDFILE --nicelevel 19 --exec $DAEMON -- \\\n        || return 2\n    # Add code here, if necessary, that waits for the process to be ready\n    # to handle requests from services started subsequently which depend\n    # on this one.  As a last resort, sleep for some time.\n}\n#\n# Function that stops the daemon\/service\n#\ndo_stop()\n{\n    # Return\n    #   0 if daemon has been stopped\n    #   1 if daemon was already stopped\n    #   2 if daemon could not be stopped\n    #   other if a failure occurred\n    start-stop-daemon --stop --quiet --retry=TERM\/30\/KILL\/5 --pidfile $PIDFILE --name $NAME\n    RETVAL=\"$?\"\n    [ \"$RETVAL\" = 2 ] &amp;&amp; return 2\n    # Wait for children to finish too if this is a daemon that forks\n    # and if the daemon is only ever run from this initscript.\n    # If the above conditions are not satisfied then add some other code\n    # that waits for the process to drop all resources that could be\n    # needed by services started subsequently.  A last resort is to\n    # sleep for some time.\n    start-stop-daemon --stop --quiet --oknodo --retry=0\/30\/KILL\/5 --exec $DAEMON\n    [ \"$?\" = 2 ] &amp;&amp; return 2\n    # Many daemons don't delete their pidfiles when they exit.\n    rm -f $PIDFILE\n    return \"$RETVAL\"\n}\ncase \"$1\" in\n  start)\n    [ \"$VERBOSE\" != no ] &amp;&amp; log_daemon_msg \"Starting $DESC\" \"$NAME\"\n    do_start\n    case \"$?\" in\n        0|1) [ \"$VERBOSE\" != no ] &amp;&amp; log_end_msg 0 ;;\n        2) [ \"$VERBOSE\" != no ] &amp;&amp; log_end_msg 1 ;;\n    esac\n    ;;\n  stop)\n    [ \"$VERBOSE\" != no ] &amp;&amp; log_daemon_msg \"Stopping $DESC\" \"$NAME\"\n    do_stop\n    case \"$?\" in\n        0|1) [ \"$VERBOSE\" != no ] &amp;&amp; log_end_msg 0 ;;\n        2) [ \"$VERBOSE\" != no ] &amp;&amp; log_end_msg 1 ;;\n    esac\n    ;;\n  status)\n    status_of_proc \"$DAEMON\" \"$NAME\" &amp;&amp; exit 0 || exit $?\n    ;;\n  restart)\n    #\n    # If the \"reload\" option is implemented then remove the\n    # 'force-reload' alias\n    #\n    log_daemon_msg \"Restarting $DESC\" \"$NAME\"\n    do_stop\n    case \"$?\" in\n      0|1)\n        do_start\n        case \"$?\" in\n            0) log_end_msg 0 ;;\n            1) log_end_msg 1 ;; # Old process is still running\n            *) log_end_msg 1 ;; # Failed to start\n        esac\n        ;;\n      *)\n        # Failed to stop\n        log_end_msg 1\n        ;;\n    esac\n    ;;\n  *)\n    echo \"Usage: $SCRIPTNAME {start|stop|status|restart}\" &gt;&amp;2\n    exit 3\n    ;;\nesac\n:\n<\/pre>\n<p>Vergeet niet dit bestand execute rechten te geven:<br \/>\n<b><code>sudo chmod +x \/etc\/init.d\/GPIOshutdown<\/code><\/b><br \/>\nOm de daemon te starten tik je in:<br \/>\n<b><code>sudo \/etc\/init.d\/GPIOshutdown start<\/code><\/b><br \/>\nDe LED zal nu met een frequentie van 0.5Hz gaan knipperen. Als je de Shutdown knop indrukt dan zal binnen twee seconden de LED met een frequentie van 4Hz gaan knipperen. Laat je de knop binnen vier seconden weer los, dan gaat de LED weer met 0.5Hz knipperen en blijft de RPi &#8216;draaien&#8217;. Hou de de Shutdown knop lang genoeg ingedrukt, tot de LED continu gaat branden, dan wordt de RPi netjes afgesloten (uiteindelijk blijft er nog slechts \u00e9\u00e9n intern LEDje op de RPi branden).<br \/>\nAls je de beide knoppen tegelijkertijd even indrukt, zal de RPi weer opstarten en zal, als je de service goed hebt ge\u00efnstalleerd de LED weer gaan knipperen.<br \/>\n<em>Let op:<\/em> Druk je beide knoppen gelijk in terwijl de RPi gewoon draait, dan <strong>Reset<\/strong> de RPi zichzelf.<br \/>\nJe kunt de daemon stoppen met het commando:<br \/>\n<b><code>sudo \/etc\/init.d\/GPIOshutdown stop<\/code><\/b><br \/>\nDe LED gaat nu uit.<br \/>\nOm de daemon automatisch te starten bij iedere reboot van de RPi moet je de service installeren met het commando:<br \/>\n<b><code>cd \/etc\/init.d<br \/>\nsudo insserv GPIOshutdown<\/code><\/b><br \/>\nWees niet bang dat dit script teveel tijd van je beperk aanwezige processor capaciteit op slokt. Het &#8216;sleep&#8217; commando gebruikt nagenoeg geen processor tijd!<\/p>\n<hr \/>\n<p>Let op: de P5 connector is bedoeld om aan de <em><strong>onderkant<\/strong><\/em> van de RPi te solderen. Omdat ik dat voor dit project niet handig vind heb ik hem aan de bovenkant (component side) gesoldeerd. Hierdoor is de pin-nummering echter omgedraaid. De <strong>vierkante<\/strong> eilandjes op de printplaat geven altijd <strong>pin 1<\/strong> aan. Ik heb alleen de even pin-nummers gebruikt waarbij de +3.3v aan de buitenkant van de RPi zit!<\/p>\n<table>\n<tr valign=\"top\">\n<td valign=\"top\">\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/P5_Header.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/P5_Header.jpg\" alt=\"P5_Header\" width=\"199\" height=\"253\" class=\"aligncenter size-full wp-image-738\" \/><\/a>\n<\/td>\n<td valign=\"top\">\n<a href=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/P1_Header.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/P1_Header.jpg\" alt=\"P1_Header\" width=\"327\" height=\"154\" class=\"aligncenter size-full wp-image-737\" \/><\/a><br \/>\n<\/tr>\n<\/table>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/willem.aandewiel.nl\/wp-content\/uploads\/2013\/09\/Test02a.jpg\" alt=\"Test02a\" width=\"720\" height=\"960\" class=\"alignright size-full wp-image-696\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Een modern Operating System (OS) vindt het niet prettig als het niet netjes wordt afgesloten voordat de computer wordt uitgezet. Voor computers met een beeldscherm en toetsenbord is dat niet zo&#8217;n probleem. Bij een systeem met een grafische interface is &hellip; <a href=\"https:\/\/willem.aandewiel.nl\/index.php\/2013\/09\/13\/shutdown-headless-raspberry-pi\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-697","post","type-post","status-publish","format-standard","hentry","category-computer"],"views":10978,"_links":{"self":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts\/697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/comments?post=697"}],"version-history":[{"count":0,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/posts\/697\/revisions"}],"wp:attachment":[{"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/media?parent=697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/categories?post=697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/willem.aandewiel.nl\/index.php\/wp-json\/wp\/v2\/tags?post=697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}