{"id":275,"date":"2021-04-15T15:31:57","date_gmt":"2021-04-15T13:31:57","guid":{"rendered":"https:\/\/carsten.familie-schumann.info\/blog\/?page_id=275"},"modified":"2021-04-15T16:16:49","modified_gmt":"2021-04-15T14:16:49","slug":"piep-show-im-vogelhaus","status":"publish","type":"page","link":"https:\/\/carsten.familie-schumann.info\/blog\/piep-show-im-vogelhaus\/","title":{"rendered":"Piep-Show im Vogelhaus"},"content":{"rendered":"<p>Die heimischen V\u00f6gel sind im Fr\u00fchjahr immer wieder imposant zu beobachten. Schon fr\u00fch morgens um 5 beginnen sie mit ihrem Gesang (andere nennen es unertr\u00e4gliches Gepl\u00e4rr) und flattern den ganzen Tag von Busch zu Baum zu Hecke zu Zaun und zur\u00fcck. Da es bei uns in der Umgebung relativ wenig Nistm\u00f6glichkeiten gibt, kam die Idee auf, ein Vogelhaus im Garten anzubringen. Nat\u00fcrlich ein richtiges Maker-Vogelhaus mit Kamera f\u00fcr die Piep-Show. Herzst\u00fcck des Vogelhauses ist ein ESP32-CAM Modul, das WLAN, eine Kamera im Megapixel-Bereich und einen programmierbaren Mikrocontroller mitbringt.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-276\" src=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/esp32cam.png\" alt=\"\" width=\"428\" height=\"365\" srcset=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/esp32cam.png 428w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/esp32cam-300x256.png 300w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/>Da die Kamera auch bei schwachen Lichtverh\u00e4ltnissen noch Bilder liefern soll, wurde aus der Kamera der Infrarotfilter entfernt. Dazu muss man nur die Linse rausschrauben und die Glasscheibe, die man im inneren der Linse sieht, entfernen. Mit der Aktion b\u00fc\u00dft man zwar die Farben ein, kann aber im Infrarot-Bereich sehen. Dazu wurden noch zwei Infrarot-Leichtdioden im Vogelhaus montiert, welche bei ca. 900nm unsichtbar f\u00fcr den Vogel das Vogelhaus erleuchten.<\/p>\n<p>Das Kamera-Modul wurde danach von Tom professionell in der doppelten Decke des Vogelhauses montiert.<\/p>\n<p><a href=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-277 alignleft\" src=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-300x225.jpg 300w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-1024x768.jpg 1024w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-768x576.jpg 768w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-1536x1152.jpg 1536w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-2048x1536.jpg 2048w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200216_170159-972x729.jpg 972w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-medium wp-image-278\" src=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-225x300.jpg\" alt=\"\" width=\"225\" height=\"300\" srcset=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-225x300.jpg 225w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-768x1024.jpg 768w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-1152x1536.jpg 1152w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-1536x2048.jpg 1536w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-972x1296.jpg 972w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171511-scaled.jpg 1920w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><a href=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"clearall alignleft wp-image-279 size-medium\" src=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-225x300.jpg\" alt=\"\" width=\"225\" height=\"300\" srcset=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-225x300.jpg 225w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-768x1024.jpg 768w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-1152x1536.jpg 1152w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-1536x2048.jpg 1536w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-972x1296.jpg 972w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_171902-scaled.jpg 1920w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-scaled.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-280\" src=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-768x1024.jpg\" alt=\"\" width=\"616\" height=\"821\" srcset=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-768x1024.jpg 768w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-225x300.jpg 225w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-1152x1536.jpg 1152w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-1536x2048.jpg 1536w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-972x1296.jpg 972w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/20200307_201520-scaled.jpg 1920w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a>Danach galt es, auf das Vogelhaus Software zu bekommen. Wir haben uns in diesem Fall mit dem von Espressif mitgelieferten Beispielcode im Arduino Studio begn\u00fcgt. Damit kann man sowohl Einzelbilder als auch Videos aufnehmen. Au\u00dferdem lassen sich massenhaft Einstellungen an der Kamera vornehmen. Das ESP32-CAM Modul bucht sich dabei nach dem Start automatisch in unser WLAN ein und stellt eine Web-Oberfl\u00e4che zur Verf\u00fcgung.<\/p>\n<p><a href=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-281\" src=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche-1024x737.png\" alt=\"\" width=\"616\" height=\"443\" srcset=\"https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche-1024x737.png 1024w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche-300x216.png 300w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche-768x553.png 768w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche-972x700.png 972w, https:\/\/carsten.familie-schumann.info\/blog\/wp-content\/uploads\/2021\/04\/Oberflaeche.png 1210w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><\/p>\n<p>Bei den ersten Tests stellte sich jedoch heraus, dass es manchmal vorkam, dass entweder die Kamera nicht sauber erkannt wurde oder das WLAN nach einer Zeit nicht mehr funktionierte. Daher haben wir in der setup- und in der main-Funktion einige Anpassungen gemacht.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#define LED_GREEN 12\r\n\r\nvoid startCameraServer();\r\n\r\nvoid setup() {\r\n  Serial.begin(115200);\r\n  Serial.setDebugOutput(true);\r\n  Serial.println();\r\n\r\n  \/\/ Gr\u00fcne LED zur Statusanzeige am Vogelhaus\r\n  pinMode(LED_GREEN, OUTPUT);\r\n  digitalWrite(LED_GREEN, 1);\r\n\r\n  \/\/ Kamera konfigurieren\r\n  camera_config_t config;\r\n  config.ledc_channel = LEDC_CHANNEL_0;\r\n  config.ledc_timer = LEDC_TIMER_0;\r\n  config.pin_d0 = Y2_GPIO_NUM;\r\n  config.pin_d1 = Y3_GPIO_NUM;\r\n  config.pin_d2 = Y4_GPIO_NUM;\r\n  config.pin_d3 = Y5_GPIO_NUM;\r\n  config.pin_d4 = Y6_GPIO_NUM;\r\n  config.pin_d5 = Y7_GPIO_NUM;\r\n  config.pin_d6 = Y8_GPIO_NUM;\r\n  config.pin_d7 = Y9_GPIO_NUM;\r\n  config.pin_xclk = XCLK_GPIO_NUM;\r\n  config.pin_pclk = PCLK_GPIO_NUM;\r\n  config.pin_vsync = VSYNC_GPIO_NUM;\r\n  config.pin_href = HREF_GPIO_NUM;\r\n  config.pin_sscb_sda = SIOD_GPIO_NUM;\r\n  config.pin_sscb_scl = SIOC_GPIO_NUM;\r\n  config.pin_pwdn = PWDN_GPIO_NUM;\r\n  config.pin_reset = RESET_GPIO_NUM;\r\n  config.xclk_freq_hz = 20000000;\r\n  config.pixel_format = PIXFORMAT_JPEG;\r\n  \/\/init with high specs to pre-allocate larger buffers\r\n  if(psramFound()){\r\n    config.frame_size = FRAMESIZE_UXGA;\r\n    config.jpeg_quality = 10;\r\n    config.fb_count = 2;\r\n  } else {\r\n    config.frame_size = FRAMESIZE_SVGA;\r\n    config.jpeg_quality = 12;\r\n    config.fb_count = 1;\r\n  }\r\n\r\n#if defined(CAMERA_MODEL_ESP_EYE)\r\n  pinMode(13, INPUT_PULLUP);\r\n  pinMode(14, INPUT_PULLUP);\r\n#endif\r\n\r\n  \/\/ Kamera initialisieren\r\n  esp_err_t err = esp_camera_init(&amp;config);\r\n  if (err != ESP_OK) {\r\n\t\/\/ Fehler bei der Initialisierung: Neu starten!\r\n    Serial.printf(&quot;Camera init failed with error 0x%x&quot;, err);\r\n\r\n    delay(2000);\r\n    ESP.restart();\r\n    return;\r\n  }\r\n\r\n  \/\/ Bild umdrehen (wegen Kameramontage)\r\n  sensor_t * s = esp_camera_sensor_get();\r\n  s-&gt;set_framesize(s, FRAMESIZE_SVGA);\r\n  s-&gt;set_vflip(s, 1);\r\n  s-&gt;set_hmirror(s, 1);\r\n\r\n  \/\/ Versuchen, WLAN zu verbinden\r\n  while(WiFi.status() != WL_CONNECTED)\r\n  {\r\n    int iTriesT=0;\r\n    WiFi.begin(ssid, password);\r\n  \r\n    while (WiFi.status() != WL_CONNECTED) {\r\n      delay(500);\r\n      Serial.print(&quot;.&quot;);\r\n      digitalWrite(LED_GREEN, iTriesT++ &amp; 1);\r\n      if(iTriesT&gt;30)\r\n        break;\r\n    }\r\n\r\n\t\/\/ Wenn wir hier ankommen, ist 30*500ms keine Verbindung zu \r\n\t\/\/ Stande gekommen. Neustart!\r\n    if(WiFi.status() != WL_CONNECTED)\r\n    {\r\n      Serial.println(&quot;WiFi Connect failed!&quot;);\r\n      WiFi.disconnect(true);\r\n      delay(500);\r\n    }\r\n  }\r\n  Serial.println(&quot;WiFi connected&quot;);\r\n\r\n  \/\/ Server starten\r\n  startCameraServer();\r\n\r\n  Serial.print(&quot;Camera Ready! Use 'http:\/\/&quot;);\r\n  Serial.print(WiFi.localIP());\r\n  Serial.println(&quot;' to connect&quot;);\r\n\r\n  digitalWrite(LED_GREEN,1);\r\n  delay(10000);\r\n}\r\n\r\nvoid loop() {\r\n  \/\/ Sobald die WLAN-Verbindung zusammenbricht, neu starten.\r\n  delay(1000);\r\n  if(WiFi.status() != WL_CONNECTED)\r\n      ESP.restart();\r\n  digitalWrite(LED_GREEN,0);\r\n}\r\n<\/pre>\n<p>Ab diesem Punkt konnten wir schon stabil Bilder und Videos aus dem Vogelhaus betrachten. Jetzt galt es noch, die Daten ins Internet zu streamen. Daf\u00fcr haben wir ein kleines PHP-Skript gebaut, das ein Bild holt und es mit zus\u00e4tzlichen Informationen versieht:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;?php\r\n\/* File: capture.php *\/\r\n\r\n$source='http:\/\/10.10.1.9\/capture';\r\n\r\n$dt = new DateTime();\r\n\r\n$date = $dt-&gt;format(&quot;Y&quot;).&quot;-&quot;.$dt-&gt;format(&quot;m&quot;).&quot;-&quot;.$dt-&gt;format(&quot;d&quot;);\r\n@mkdir (&quot;raw_&quot;.$date);\r\n@mkdir (&quot;ovl_&quot;.$date);\r\n\r\n$raw_image_file = &quot;raw_&quot;.$date.&quot;\/&quot;.&quot;raw_&quot;.$date.&quot;_&quot;.$dt-&gt;format(&quot;H&quot;).&quot;-&quot;.$dt-&gt;format(&quot;i&quot;).&quot;-&quot;.$dt-&gt;format(&quot;s&quot;).&quot;_&quot;.$dt-&gt;format(&quot;U&quot;).&quot;.jpg&quot;;\r\n$ovl_image_file = &quot;ovl_&quot;.$date.&quot;\/&quot;.&quot;ovl_&quot;.$date.&quot;_&quot;.$dt-&gt;format(&quot;H&quot;).&quot;-&quot;.$dt-&gt;format(&quot;i&quot;).&quot;-&quot;.$dt-&gt;format(&quot;s&quot;).&quot;_&quot;.$dt-&gt;format(&quot;U&quot;).&quot;.jpg&quot;;\r\n\r\n\r\n$tod = $dt-&gt;format(&quot;H&quot;)*3600 + $dt-&gt;format(&quot;i&quot;)*60 + $dt-&gt;format(&quot;s&quot;);\r\n\r\n\/\/ Wetterinformationen holen\r\n$weather_json = file_get_contents(\r\n    &quot;http:\/\/api.openweathermap.org\/data\/2.5\/weather?q=Dorsten&amp;mode=json&amp;units=metric&amp;appid=&lt;apikey&gt;&amp;lang=de&quot;\r\n);\r\n$weather = json_decode($weather_json);\r\n\r\n\/\/ Bild vom Vogelhaus holen\r\n$ch = curl_init();\r\ncurl_setopt($ch, CURLOPT_URL, $source);\r\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\r\ncurl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); \/\/ seconds\r\ncurl_setopt($ch, CURLOPT_TIMEOUT, 10); \/\/timeout in seconds\r\n$image_string  = curl_exec($ch);\r\n$curl_errno = curl_errno($ch);\r\ncurl_close($ch);\r\n\r\nif($curl_errno&gt;0)\r\n    throw new Exception(&quot;Connection to Vogelhaus failed!&quot;);\r\n\r\n\r\n\/\/ Erstmal das Rohbild schreiben\r\nfile_put_contents($raw_image_file, $image_string);\r\n\r\n\/\/ Bild laden, um es zu bearbeiten\r\n$image=imagecreatefromstring($image_string);\r\nif(!$image)\r\n    throw new Exception(&quot;Cannot create image from string!&quot;);\r\n\r\n\r\n\/\/ Darstellung der Tageszeit am oberen Rand des Bildes\r\n$x = $tod \/ 86400 * 390 + 205;\r\n\r\n$color = imagecolorallocate($image, 0x30,0xFF,0x10);\r\n\r\nimagepolygon($image, &#x5B;\r\n    200,10,\r\n    600,10,\r\n    600,20,\r\n    200,20,\r\n    200,10],5, $color);\r\n\r\nimagefilledellipse($image,\r\n    $x,15,\r\n    8,8,\r\n    $color);\r\n\r\nimagestring($image, 3, 610, 9, sprintf(&quot;%02d:%02d:%02d&quot;, $dt-&gt;format(&quot;H&quot;), $dt-&gt;format(&quot;i&quot;), $dt-&gt;format(&quot;s&quot;)), $color);\r\nimagestring($image, 3, 120, 9, sprintf(&quot;%02d.%02d.%04d&quot;, $dt-&gt;format(&quot;d&quot;), $dt-&gt;format(&quot;m&quot;), $dt-&gt;format(&quot;Y&quot;)), $color);\r\n\r\n\/\/ Darstellung der Wetterinformationen oben rechts\r\nimagestring($image, 3, 670,  9, sprintf(&quot; Temp:  %3d %cC&quot;, $weather-&gt;main-&gt;temp,176 ), $color);\r\nimagestring($image, 3, 670, 21, sprintf(&quot; Wind:  %3.1f m\/s&quot;, $weather-&gt;wind-&gt;speed ), $color);\r\nimagestring($image, 3, 670, 34, sprintf(&quot;   RH:  %3d %%&quot;, $weather-&gt;main-&gt;humidity ), $color);\r\nimagestring($image, 3, 670, 47, sprintf(&quot;Druck: %4d mbar&quot;, $weather-&gt;main-&gt;pressure ), $color);\r\nimagestring($image, 3, 670, 47, sprintf(&quot;Druck: %4d mbar&quot;, $weather-&gt;main-&gt;pressure ), $color);\r\nimagestring($image, 3, 670, 66, sprintf(&quot;%s&quot;, utf8_decode($weather-&gt;weather&#x5B;0]-&gt;description) ), $color);\r\n\r\nimagestringup($image, 2 , 780, 580, &quot;https:\/\/vogelhaus.familie-schumann.info&quot;, $color);\r\n\r\n\/\/ Bilddatei schreiben\r\nimagejpeg($image, $ovl_image_file,90);\r\n\r\n\r\n\/\/ Datei per SSH auf den Server schieben\r\nexec('scp '.$ovl_image_file.' vogelhaus@webserver:~\/vogelhaus\/'.$ovl_image_file);\r\n<\/pre>\n<p>Dieses Skript wird nun 4x pro Minute aufgerufen. Das erfolgt per CRON-Job durch ein kleines Hilfsskript, das jede Minute aufgerufen wird:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\n#!\/bin\/bash\r\n\r\nphp capture.php\r\nsleep 15\r\nphp capture.php\r\nsleep 15\r\nphp capture.php\r\nsleep 15\r\nphp capture.php\r\n<\/pre>\n<p>So landet im Schnitt alle 15 Sekunden ein neues Bild, das nur noch angezeigt werden muss. <\/p>\n<p>In unserer Anwendung auf <a href=\"https:\/\/vogelhaus.familie-schumann.info\">https:\/\/vogelhaus.familie-schumann.info<\/a> erfolgt die Anzeige \u00fcber React als Frontend mit PHP als Backend. Die Klassifikation der Bilder (Erkennung des Vogels) erfolgt \u00fcber TensorFlow, das nach knapp 2000 Bildern Training eine Trefferquote von 99,9% hat. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die heimischen V\u00f6gel sind im Fr\u00fchjahr immer wieder imposant zu beobachten. Schon fr\u00fch morgens um 5 beginnen sie mit ihrem Gesang (andere nennen es unertr\u00e4gliches Gepl\u00e4rr) und flattern den ganzen Tag von Busch zu Baum zu Hecke zu Zaun und zur\u00fcck. Da es bei uns in der Umgebung relativ wenig Nistm\u00f6glichkeiten gibt, kam die Idee&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/carsten.familie-schumann.info\/blog\/piep-show-im-vogelhaus\/\">Mehr Lesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-275","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages\/275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/comments?post=275"}],"version-history":[{"count":8,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages\/275\/revisions"}],"predecessor-version":[{"id":301,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages\/275\/revisions\/301"}],"wp:attachment":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/media?parent=275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}