<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mobilfunk &#8211; datort.de</title>
	<atom:link href="https://datort.de/tag/mobilfunk/feed/" rel="self" type="application/rss+xml" />
	<link>https://datort.de</link>
	<description>Retro, Gaming, Tech: Videos und Berichte</description>
	<lastBuildDate>Tue, 04 Nov 2025 20:29:37 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://datort.de/wp-content/uploads/2024/10/cropped-datort_computer_isolated-32x32.png</url>
	<title>Mobilfunk &#8211; datort.de</title>
	<link>https://datort.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Arduino/ESP + SIMCom A7670E LTE-Modul</title>
		<link>https://datort.de/raspberry-arduino/1113/arduino-esp-simcom-a7670e-lte-modul/</link>
					<comments>https://datort.de/raspberry-arduino/1113/arduino-esp-simcom-a7670e-lte-modul/#respond</comments>
		
		<dc:creator><![CDATA[datort]]></dc:creator>
		<pubDate>Wed, 10 Sep 2025 18:57:35 +0000</pubDate>
				<category><![CDATA[Raspberry & Arduino]]></category>
		<category><![CDATA[Youtube]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Elektrotechnik]]></category>
		<category><![CDATA[esp32]]></category>
		<category><![CDATA[ESP8266]]></category>
		<category><![CDATA[Mobilfunk]]></category>
		<guid isPermaLink="false">https://datort.de/?p=1113</guid>

					<description><![CDATA[Auch in Deutschland ist vermutlich Mitte 2028 Schluß mit dem 2G GSM-Netz: Sowohl Telekom als auch Vodafone haben&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Auch in Deutschland ist vermutlich Mitte 2028 Schluß mit dem 2G GSM-Netz: Sowohl Telekom als auch Vodafone haben das Datum zur Abschaltung ihrer ersten digitalen Mobilfunknetze vor einiger Zeit verkündet. Module wie das SIM800L, die nur das 2G-Netz mit GPRS und EDGE unterstützen, werden dann nicht mehr funktionieren. Zeit sich nach Alternativen umzusehen. Das A7670E von SIMCom könnte eine solche Altnative sein. Es ist mit knapp über 10,- Euro von Aliexpress und co. relativ günstig zu haben und via UART-Schnittstelle auch leicht mit 2 Kabeln anzubinden. Allerdings ist nicht alles Gold was glänzt. Hier meine schnelle Pros-/Cons-Liste, bevor wir uns das Board und Software-Beispiele genauer ansehen.</p>



<p><strong>+</strong> relativ günstig<br><strong>+</strong> kompakt<br><strong>+</strong> überschaubarer Stromverbrauch<br><strong>+</strong> optional mit GPS und Bluetooth<br><strong>+</strong> USB-Anschluss für schnellere Datenübertragung<br><br><strong>&#8211;</strong> min. 5 V Versorgungsspannung (SIM800L lief auch mit 3.7 V)<br><strong>&#8211;</strong> Status LED ungenau (moniert nicht verbunden zu sein, obwohl Daten gesendet und empfangen werden)</p>



<h2 id="videoanleitung" class="cnvs-block-section-heading cnvs-block-section-heading-1757866690807 is-style-cnvs-block-section-heading-11 halignleft" >
	<span class="cnvs-section-title">
		<span>Videoanleitung</span>
	</span>
</h2>


<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><a href="https://datort.de/raspberry-arduino/1113/arduino-esp-simcom-a7670e-lte-modul/"><img decoding="async" src="https://datort.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FxPMGg86Webg%2Fmaxresdefault.jpg" alt="YouTube Video"></a><br /><br /><figcaption></figcaption></figure>


<h2 id="hardware" class="cnvs-block-section-heading cnvs-block-section-heading-1757071876446 is-style-cnvs-block-section-heading-11 halignleft" >
	<span class="cnvs-section-title">
		<span>Hardware</span>
	</span>
</h2>



<p>Für mein Test-Setup verwende ich ein ESP32-WROOM-32D-Board. Andere Boards sind möglich. Ich verwende dieses Board aufgrund der Hardware-Serial, über die die Kommunikation zwischen ESP und A7670E-LTE-Modem läuft. Die Beschriftung auf dem Modem ist ein bisschen unübersichtlich. Auf meinem Board von oben nach unten: <br><strong>G: GND, R: RXD, T: TXT, K: PWRKEY, V: VCC, G: GND, S-SLEEP</strong></p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-1024x1024.jpeg" alt="" class="wp-image-1152" srcset="https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-1024x1024.jpeg 1024w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-300x300.jpeg 300w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-200x200.jpeg 200w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-768x768.jpeg 768w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-80x80.jpeg 80w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-110x110.jpeg 110w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-380x380.jpeg 380w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-800x800.jpeg 800w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins-1160x1160.jpeg 1160w, https://datort.de/wp-content/uploads/2025/09/A7670E_Pins.jpeg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Für mein Setup genügt es, vom ESP TX/RX über Kreuz zu verbinden: Also: TX vom ESP auf RX vom Modem und umgekehrt. Außerdem teilen sich ESP und A7670E einen Ground. Das wars dann aber auch. Ich hatte zwischenzeitlich einen 2200μF-Kondensator verbaut, bis ich gesehen habe das genau für diesen Zweck bereits ein 4700μF-Kondensator auf dem Modem verbaut ist. Trotzdem kackte das Modem beim Einbuchen ins LTE-Netz ab und an ab &#8211; die Stromversorgung scheint da aber wohl dann nicht der Grund gewesen zu sein?! </p>



<h2 id="software" class="cnvs-block-section-heading cnvs-block-section-heading-1757071899911 is-style-cnvs-block-section-heading-11 halignleft" >
	<span class="cnvs-section-title">
		<span>Software</span>
	</span>
</h2>



<p>Getestet wurde das hier mit dem A7670E-Modul. Allerdings sollten die meisten Sketches auch mit anderen Boards von SIMCom funktionieren, sofern sie den gleichen Befehlssatz unterstützen. </p>



<h5 id="basis-sketch" class="wp-block-heading">Basis Sketch</h5>



<p>Um es auch für Einsteiger verständlich zu halten, teile ich die einzelnen Funktion in kleine Snippets auf. So könnt ihr euch das raussuchen, was für euer Szenario am besten passt. Diese basieren auf folgender Basis, die zunächst nichts weiter macht als die Kommunikation mit dem A7670E sicherzustellen und die Antworten des Moduls im Serial Monitor euer (Arduino-)IDE anzuzeigen. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;

#define RX_PIN 17 // RX-Pin des ESP-Boards
#define TX_PIN 16 // TX-Pin des ESP-Boards
HardwareSerial modem(2);

void setup() {
  Serial.begin(115200);

  delay(1000);
  Serial.println(&quot;Serial connection ready&quot;);

  modem.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  modem.println(&quot;AT&quot;); // AT = Attention, Modem muss mit &quot;OK&quot; antworten
}

void loop() {
  while (modem.available()) {
    String resp = modem.readStringUntil(&#039;\n&#039;);
    resp.trim();
    if (resp.length() &gt; 0) {
      Serial.println(&quot;Modem: &quot; + resp); // Jede Antwort des Modems in der Serial gekennzeichnet ausgeben
    }
  }
}
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Serial connection ready
Modem: AT
Modem: OK
</pre></div>


<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="768" src="https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-1024x768.jpeg" alt="" class="wp-image-1155" srcset="https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-1024x768.jpeg 1024w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-300x225.jpeg 300w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-768x576.jpeg 768w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-200x150.jpeg 200w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-260x195.jpeg 260w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-380x285.jpeg 380w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-800x600.jpeg 800w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot-1160x870.jpeg 1160w, https://datort.de/wp-content/uploads/2025/09/A7670E-ESP32-Topshot.jpeg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h5 id="mobilfunkstatus-sketch" class="wp-block-heading">Mobilfunkstatus Sketch</h5>



<p>Um zu prüfen, ob das A7670E-Modul mit dem Mobilfunknetz verbunden ist, können wir es einfach selbst fragen. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;

#define RX_PIN 17
#define TX_PIN 16
HardwareSerial modem(2);

void setup() {
  Serial.begin(115200);

  delay(1000);
  Serial.println(&quot;Serial connection ready&quot;);

  modem.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  modem.println(&quot;AT&quot;);
}

void loop() {
  while (modem.available()) {
    String resp = modem.readStringUntil(&#039;\n&#039;);
    resp.trim();
    if (resp.length() &gt; 0) {
      Serial.println(&quot;Modem: &quot; + resp);
    }
  }

  static unsigned long lastRun = millis() - 18000;
  if (millis() - lastRun &gt; 20000) { // Nach 2 Sekunden alle 20 Sekunden aktualisieren
    lastRun = millis();

    modem.println(&quot;AT+CSQ&quot;);      // Signalstärke
    modem.println(&quot;AT+CEREG?&quot;);   // LTE Netzregistrierung
    modem.println(&quot;AT+CGATT?&quot;);   // Datenregistrierung
    modem.println(&quot;AT+CGACT?&quot;);   // PDP Kontext aktiv? (Datenverbindung)
    modem.println(&quot;AT+CGPADDR&quot;);  // IP-Adresse
    modem.println(&quot;AT+NETOPEN?&quot;); // Socket-Service Status
  }
}
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Modem: AT+CSQ
Modem: +CSQ: 26,99
Modem: OK
Modem: AT+CEREG?
Modem: +CEREG: 0,1
Modem: OK
Modem: AT+CGATT?
Modem: +CGATT: 1
Modem: OK
Modem: AT+CGACT?
Modem: +CGACT: 1,1
Modem: +CGACT: 8,1
Modem: OK
Modem: AT+CGPADDR
Modem: +CGPADDR: 1,10.76.56.42
Modem: +CGPADDR: 8,0.0.0.0,254.128.0.0.0.0.0.0.194.209.178.131.245.194.29.154
Modem: OK
Modem: AT+NETOPEN?
Modem: +NETOPEN: 0
Modem: OK
</pre></div>


<p class="has-small-font-size"><strong>+CSQ: 26,99</strong>: 26 ist die Signalqualität, Skala 0-31, 26 = ziemlich guter Empfang<br><strong>+CEREG: 0,1</strong>: Erfolgreich im LTE-Netz eingebucht<br><strong>+CGATT: 1</strong>: Datenverbindung aktiv<br><strong>+CGACT: 1,1</strong> &amp; <strong>+CGACT: 8,1</strong>: Zwei Datenkontexte offen<br><strong>+CGPADDR: 1,10.76.56.42</strong><br><strong>+CGPADDR: 8,0.0.0.0,254.128.0.0.0.0.0.0.194.209.178.131.245.194.29.154</strong>: IP-Adressen, die das Board erhalten hat</p>



<h5 id="ping-sketch" class="wp-block-heading">Ping Sketch</h5>



<p>Ein grundlegender Test von Netzwerk-Kommunikation ist ein &#8222;ping&#8220;: Ein kleines Datenpaket wird an einen Server gesendet. Kommt das Paket an antwortet der Server und der Nutzer sieht, wie lange das Datenpaket auf Reise war. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;

#define RX_PIN 17
#define TX_PIN 16
HardwareSerial modem(2);

void setup() {
  Serial.begin(115200);

  delay(1000);
  Serial.println(&quot;Serial connection ready&quot;);

  modem.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  modem.println(&quot;AT&quot;);
}

void loop() {
  while (modem.available()) {
    String resp = modem.readStringUntil(&#039;\n&#039;);
    resp.trim();
    if (resp.length() &gt; 0) {
      Serial.println(&quot;Modem: &quot; + resp);
    }
  }

  static unsigned long lastRun = millis() - 18000;
  if (millis() - lastRun &gt; 20000) {
    lastRun = millis();

    modem.println(&quot;AT+CPING=\&quot;8.8.8.8\&quot;,1,4&quot;); // 4 Pings an Google DNS senden
  }
}
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Modem: AT+CPING=&quot;8.8.8.8&quot;,1,4
Modem: OK
Modem: +CPING: 1,8.8.8.8,92,130,114
Modem: +CPING: 1,8.8.8.8,92,40,114
Modem: +CPING: 1,8.8.8.8,92,15,114
Modem: +CPING: 1,8.8.8.8,92,30,114
Modem: +CPING: 3,4,4,0,15,130,40
</pre></div>


<p class="has-small-font-size"><strong>AT+CPING=&#8220;8.8.8.8&#8243;,1,4</strong>: 8.8.8.8 ist die Ziel-IP-Adresse, 1 steht für IPv4 (2 wäre IPv6), 4 ist die Anzahl der Wiederholungen<br><strong>+CPING: 1,8.8.8.8,92,130,114</strong>: 1: Ping erfolgreich, der vorletzte Wert (hier 130) ist die Laufzeit in ms, die anderen Werte bitte dem Manual entnehmen<br><strong>+CPING: 3,4,4,0,15,130,40</strong>: Zusammenfassung über die 4 Pings</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="768" src="https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-1024x768.jpeg" alt="" class="wp-image-1156" srcset="https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-1024x768.jpeg 1024w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-300x225.jpeg 300w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-768x576.jpeg 768w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-200x150.jpeg 200w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-260x195.jpeg 260w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-380x285.jpeg 380w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-800x600.jpeg 800w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme-1160x870.jpeg 1160w, https://datort.de/wp-content/uploads/2025/09/A7670E-Stromaufnahme.jpeg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">In der Regel ist die Stromaufnahme sehr gering. Beim Senden und Empfangen kann der Verbrauch kurzzeitig ansteigen. HTTPS-Traffic verbraucht (wenig überraschend) noch etwas mehr Strom</figcaption></figure>



<h5 id="daten-via-http-abrufen-http-get-request" class="wp-block-heading">Daten via HTTP abrufen (HTTP GET-Request)</h5>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;

#define RX_PIN 17
#define TX_PIN 16
HardwareSerial modem(2);

void setup() {
  Serial.begin(115200);

  delay(1000);
  Serial.println(&quot;Serial connection ready&quot;);

  modem.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  modem.println(&quot;AT&quot;);
}

void loop() {
  while (modem.available()) {
    String resp = modem.readStringUntil(&#039;\n&#039;);
    resp.trim();
    if (resp.length() &gt; 0) {
      Serial.println(&quot;Modem: &quot; + resp);
    }
  }

  static unsigned long lastRun = millis() - 18000;
  if (millis() - lastRun &gt; 20000) {
    lastRun = millis();

    modem.println(&quot;AT+HTTPINIT&quot;); // HTTP-Service des Modems starten

    
    modem.println(&quot;AT+HTTPPARA=\&quot;URL\&quot;,http://httpbin.org/get&quot;); // Abzurufende Adresse
    modem.println(&quot;AT+HTTPACTION=0&quot;); // 0 = GET, 1 = POST, 2 = HEAD, 3 = DELETE, 4 = PUT

    delay(2500); // Wir gehen davon aus, in 2.5s die Antwort zu erhalten. Vermutlich besser: AT+HTTPACTION auswerten, liefert die Content-Length

    modem.println(&quot;AT+HTTPHEAD&quot;); // Ausgabe des Response Headers

    delay(200);

    modem.println(&quot;AT+HTTPREAD=99999&quot;); // &quot;Unsaubere Implementierung&quot;: Eigentlich AT+HTTPREAD? nutzen um Länge der Antwort zu ermitteln
    modem.println(&quot;AT+HTTPTERM&quot;); // HTTP-Service nach Verwendung stoppen
  }
}
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Modem: AT+HTTPINIT
Modem: ERROR
Modem: AT+HTTPPARA=&quot;URL&quot;,http://httpbin.org/get
Modem: OK
Modem: AT+HTTPACTION=0
Modem: OK
Modem: +HTTPACTION: 0,200,255
Modem: AT+HTTPHEAD
Modem: +HTTPHEAD: 226
Modem: HTTP/1.1 200 OK
Modem: Date: Fri, 05 Sep 2025 15:28:01 GMT
Modem: Content-Type: application/json
Modem: Content-Length: 255
Modem: Connection: keep-alive
Modem: Server: gunicorn/19.9.0
Modem: Access-Control-Allow-Origin: *
Modem: Access-Control-Allow-Credentials: true
Modem: OK
Modem: AT+HTTPREAD?
Modem: +HTTPREAD: LEN,255
Modem: OK
Modem: AT+HTTPREAD=99999
Modem: OK
Modem: AT+HTTPTERM
Modem: OK
Modem: +HTTPREAD: 255
Modem: {
Modem: &quot;args&quot;: {},
Modem: &quot;headers&quot;: {
Modem: &quot;Accept&quot;: &quot;*/*&quot;,
Modem: &quot;C &quot;origin&quot;: &quot;80.187.118.156&quot;,
Modem: &quot;url&quot;: &quot;http://httpbin.org/get&quot;
Modem: }
Modem: +HTTPREAD: 0
</pre></div>


<p class="has-small-font-size"><strong>+HTTPACTION: 0,200,255</strong>: 0 = Type der Anfrage (GET), 200 = Statuscode des Servers, 255 = Länge der Antwort in Bytes<br><strong>+HTTPHEAD: 226</strong>: Start Ausgabe des Headers, 226 Bytes<br><strong>+HTTPREAD: LEN,255</strong>: Eine Response liegt vor, 255 Bytes<br><strong>+HTTPREAD: 255</strong>: Beginn der Ausgabe des Response bis <strong>HTTPREAD: 0</strong></p>



<h5 id="daten-via-http-senden-http-post-put-patch" class="wp-block-heading">Daten via HTTP senden (HTTP POST, PUT, PATCH)</h5>



<p>Im vorangegangenen Beispiel beim Abruf der Daten via HTTP haben wir etwas &#8222;gefuttelt&#8220; was die Antworten anging. So haben wir mit delay gearbeitet und gehofft, dass bis dahin eine Antwort da ist. Damit kommen wir jetzt nicht mehr durch. Um den Code weiter lesbar zu halten, habe ich die Logik in einzelne Funktionen aufgeteilt.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;

#define RX_PIN 17
#define TX_PIN 16
HardwareSerial modem(2);

String waitForURC(const char* token, unsigned long timeoutMs = 10000) { // URC: Unsolicited Result Code, Ereignisbasierte Melungen des Modems abfragen. In unserem Fall für die Antwort nach dem POST genutzt
  unsigned long start = millis();
  String buffer;

  while (millis() - start &lt; timeoutMs) {
    while (modem.available()) {
      String line = modem.readStringUntil(&#039;\n&#039;);
      line.trim();

      if (line.length() &gt; 0) {
        Serial.println(&quot;URC: &quot; + line);
      }

      if (line.startsWith(token)) {
        return line;
      }
    }
  }
  Serial.println(&quot;Timeout beim Warten auf URC: &quot; + String(token));
  return &quot;&quot;;
}

void readHttpResponse() {
  modem.println(&quot;AT+HTTPREAD=99999&quot;); // Wir lesen pauschal alles; Hier könnte man auch mit der genauen Zahl an Bytes arbeiten (was sauberer wäre), aber das LTE-Modul liefert nur solange Daten zurück, wie sie vorliegen.
  
  String response;
  unsigned long startTime = millis();

  while (millis() - startTime &lt; 15000) {
    while (modem.available()) {
      String line = modem.readStringUntil(&#039;\n&#039;);
      line.trim();

      if (line.startsWith(&quot;+HTTPREAD:&quot;)) continue;
      if (line == &quot;OK&quot;) {
        Serial.println(&quot;HTTP-Body:&quot;);
        Serial.println(response);
        return;
      }

      response += line + &quot;\n&quot;;
    }
  }
  Serial.println(&quot;Timeout beim Lesen der Response!&quot;);
}

void httpPost(const char* url, const char* json) { // Methode speziell für den HTTP POST-Prozess
  modem.println(&quot;AT+HTTPINIT&quot;);
  modem.printf(&quot;AT+HTTPPARA=\&quot;URL\&quot;,\&quot;%s\&quot;\r\n&quot;, url);
  modem.println(&quot;AT+HTTPPARA=\&quot;CONTENT\&quot;,\&quot;application/json\&quot;&quot;); // Festsetzen des Inhalts auf JSON
  modem.printf(&quot;AT+HTTPDATA=%d,5000\r\n&quot;, strlen(json)); // Dem Modem mitteilen, dass gleich Daten kommen, die es für die Übermittlung aufzeichnen soll

  String dl = waitForURC(&quot;DOWNLOAD&quot;, 5000); // Warten bis das Modem mit &quot;DOWNLOAD&quot; antwortet, dann senden unseres JSON
  if (dl.length() &gt; 0) {
    modem.print(json);
    if (waitForURC(&quot;OK&quot;, 5000).length() == 0) { // Im Anschluss auf die Bestätigung der Übertragung durch das Modem warten
      Serial.println(&quot;Modem or connection stuck, too many data sent or check wiring&quot;);
      return;
    }
  }

  modem.println(&quot;AT+HTTPACTION=1&quot;); // 1 = POST
  String action = waitForURC(&quot;+HTTPACTION:&quot;, 15000); // Hier optimierter Ablauf: Sobald die Anfrage vom Modem versendet wurde, geht&#039;s weiter...

  if (action.length() &gt; 0) {
    int method, status, len;
    if (sscanf(action.c_str(), &quot;+HTTPACTION: %d,%d,%d&quot;, &amp;method, &amp;status, &amp;len) == 3) {
      Serial.printf(&quot;HTTP Status: %d, Length: %d\n&quot;, status, len);

      if (status == 200 || status == 201) { // Status code 200/201 stehen für eine erfolgreiche Anfragen bei POST
        readHttpResponse(); // Auslesen der Antwort in einer eigenen Funktion dafür
      } else {
        Serial.println(&quot;Unexpected response&quot;);
      }
    }
  }

  modem.println(&quot;AT+HTTPTERM&quot;);
}

void setup() {
  Serial.begin(115200);

  delay(1000);
  Serial.println(&quot;Serial connection ready&quot;);

  modem.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  modem.println(&quot;AT&quot;);
}

void loop() {
  while (modem.available()) {
    String resp = modem.readStringUntil(&#039;\n&#039;);
    resp.trim();
    if (resp.length() &gt; 0) {
      Serial.println(&quot;Modem: &quot; + resp);
    }
  }

  static unsigned long lastRun = millis() - 18000;
  if (millis() - lastRun &gt; 20000) {
    lastRun = millis();
    const char* json = &quot;{\&quot;temperature\&quot;:25.3,\&quot;battery_level\&quot;:\&quot;83\&quot;}&quot;; // Unsere Daten verpackt in JSON

    httpPost(&quot;http://httpbin.org/post&quot;, json); // Start des HTTP Post
  }
}
</pre></div>

<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Serial connection ready
Modem: AT
Modem: OK
URC: AT+HTTPINIT
URC: OK
URC: AT+HTTPPARA=&quot;URL&quot;,&quot;http://httpbin.org/post&quot;
URC: OK
URC: AT+HTTPPARA=&quot;CONTENT&quot;,&quot;application/json&quot;
URC: OK
URC: AT+HTTPDATA=41,5000
URC: DOWNLOAD
URC: OK
URC: AT+HTTPACTION=1
URC: OK
URC: +HTTPACTION: 1,200,488
HTTP Status: 200, Length: 488
HTTP-Body:
AT+HTTPREAD=99999

Modem: +HTTPREAD: 488
Modem: {
Modem: &quot;args&quot;: {},
Modem: &quot;data&quot;: &quot;{\&quot;temperature\&quot;:25.3,\&quot;battery_level\&quot;:\&quot;83\&quot;}&quot;,
Modem: &quot;files&quot;: {},
Modem: &quot;form&quot;: {},
Modem: &quot;headers&quot;: {
Modem: &quot;Accept&quot;: &quot;*/*&quot;,
Modem: &quot;Cache-Control&quot;: &quot;no-cache&quot;,
Modem: &quot;Content-Length&quot;: &quot;41&quot;,
Modem: &quot;Content-Type&quot;: &quot;application/json&quot;,
Modem: &quot;Host&quot;: &quot;httpbin.org&quot;,
Modem: &quot;X-Amzn-Trace-Id&quot;: &quot;Root=1-68bd430d&quot;,
Modem: &quot;url&quot;: &quot;http://httpbin.org/post&quot;
Modem: }
Modem: AT+HTTPTERM
Modem: OK
Modem: +HTTPREAD: 0
</pre></div>


<p class="has-small-font-size">Dadurch das mit waitForURC auf ein Ereignis warten, verschieben sich hier die Ausgaben ein wenig. <br><strong>AT+HTTPDATA=41,5000</strong>: Unsere zu sendenden Daten sind 41 Bytes lang, Timeout: 5 Sekunden<br><strong>+HTTPACTION: 1,200,488</strong>: Die Übertragung war erfolgreich, 488 Bytes lang ist die Antwort<br><strong>AT+HTTPREAD=99999</strong>: Wir lesen pauschal 99999 Bytes, das Modem liefert aber nur so viel Daten zurück wie vorhanden; Wir hätten hier auch die 488 aus der HTTPACTION-Antwort verwenden können. Das wäre sauberer gewesen, aber in manchen Fällen (bspw. &#8222;chunked&#8220;-Responses) liegt wieder Wert nicht vor. Wir haben es uns also einfacher gemacht<br><strong>+HTTPREAD: 488</strong>: Beginn der Ausgabe der Antwort des Servers, enthält als Bestätigung unter &#8222;data&#8220; das, was wir geposted haben</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="624" src="https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-1024x624.png" alt="" class="wp-image-1158" srcset="https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-1024x624.png 1024w, https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-300x183.png 300w, https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-768x468.png 768w, https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-380x232.png 380w, https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-800x488.png 800w, https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole-1160x707.png 1160w, https://datort.de/wp-content/uploads/2025/09/A7670E-Debugging-in-Konsole.png 1238w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">In der Konsole (hier Plattform IO, &#8222;Serieller Monitor&#8220; in Arduino IDE) sieht man die Ausgaben des Modems und kann so nachvollziehen, was passiert</figcaption></figure>



<h5 id="besonderheiten-bei-https" class="wp-block-heading">Besonderheiten bei HTTPS</h5>



<p>Das 7670E-Modul ist dazu in der Lage Daten unverschlüsselt über HTTP, als auch verschlüsselt via HTTPS zu übertragen. Im besten Fall ist dazu nicht viel mehr nötig, als in den hier genannten Beispielen auf &#8222;http://&#8220; ein &#8222;https://&#8220; zu machen. Allerdings steckt der Teufel da gerne im Detail, denn HTTPS ≠ HTTPS. </p>



<p>Hier ein Mini-Exkurs: Werden im Netz Daten verschlüsselt übertragen, kommen dazu unterschiedliche Mechanismen zu tragen. So wird zum einen ein Verschlüsselungsalgorithmus zwischen Client und Server ausgehandelt., heutzutage oft TLS 1.2 oder größer. Neben diesem wird ein passendes Zertifikat benötigt. Gerade wenn es günstig sein soll, wird heute oft Lets Encrypt verwendet &#8211; mach ich auch so. Damit die Kommunikation aber wirklich sicher ist, müssen Betriebssysteme, Browser oder eben LTE-Module mit HTTPS-Support aber die Stammzertifikate der Anbieter kennen. Ein weiteres Thema ist Server Name Indication (SNI) in Verbindung mit virtuellen Hosts. Kurz um: Viele Dinge, die entweder eine vermeintlich sichere Verbindung unsicher machen können oder sie erst gar nicht zustand kommen lassen. </p>



<h6 id="wenn-die-uebertragung-nicht-gelingt" class="wp-block-heading">Wenn die Übertragung nicht gelingt&#8230;</h6>



<p>&#8230;geht&#8217;s an Debugging. Folgende Sachen könnt ihr prüfen:</p>



<p><strong>SNI aktivieren</strong><br>Das Modul hat zur Laufzeit 8 SSL-Konfiguration im Speicher. Per Default ist da wenig konfiguriert, außer die Art der TLS-Verschlüsselung mit der Gegenseite automatisch ausgehandelt werden soll. Was dabei nicht konfiguriert wird ist Server Name Indication. Das kann aber essentiell sein, nämlich dann, wenn euer Server mit Virtual Hosts arbeitet. Aktiviert SNI vor dem <strong>AT+HTTPINIT</strong> mit:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
modem.println(&quot;AT+CSSLCFG=\&quot;enableSNI\&quot;,0,1&quot;)
</pre></div>


<p class="has-small-font-size">SNI wird für den SSL-Kontext &#8222;0&#8220; mit &#8222;1&#8220; aktiviert. SSL-Kontext 0 ist der erste der genannten 8 möglichen und wird per default verwendet. Um die SSL-Kontext-ID anzupassen, kann man den Befehl <strong>AT+HTTPPARA=&#8220;SSLCFG&#8220;,2</strong> nutzen, wobei hier die 2 symbolisch für die ID des Index steht, also 0-7.</p>



<p><strong>HTTPACTION auswerten</strong><br>Einen GET-Request starten wir ja mit <strong>AT+HTTPACTION=0</strong>. Das Modul gibt neben einem &#8222;OK&#8220; auch weitere Informationen aus, im besten Fall sowas: <strong>+HTTPACTION: 0,200,81</strong><br>Die 0 steht für die Art der Anfrage (GET), die 200 für den vom Server gesendeten Statuscode und 81 ist die Länge der Antwort. Ist die Antwort nicht erfolgreich, ist interessant was dort statt 200 steht. Eine 706 würden auf Probleme beim Lesen der Antwort hindeuten, aber gleichzeitig bekräftigen, dass der TLS-Handshake zuvor erfolgreich war, während eine 715 eben genau auf Probleme bei ebendiesem hinweisen würden. In dem Fall müsste man prüfen, ob der verwendete TLS-Standard auf deinem Server von dem LTE-Modul überhaupt unterstützt wird.</p>



<p><strong>HTTP-Header auslesen</strong><br>Mit <strong>AT+HTTPHEAD</strong> lässt sich nach dem Absenden der Anfrage der Antwort-Header auslesen. Hier können auch Hinweise auf das Problem aufgeführt sein, wenn man Glück hat. Das oben angesprochene SNI-Problem könnte beispielsweise hier benannt werden.</p>



<h5 id="https-get-beispiel-sketch" class="wp-block-heading">HTTPS GET Beispiel Sketch</h5>



<p>Die oben genannte Punkte sind in diesem Beispiel berücksichtig, welcher bei mir erfolgreich funktionierte. </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
#include &lt;Arduino.h&gt;
 
#define RX_PIN 17
#define TX_PIN 16
HardwareSerial modem(2);


String waitForURC(const char* token, unsigned long timeoutMs = 10000) {
  unsigned long start = millis();
  String buffer;
 
  while (millis() - start &lt; timeoutMs) {
    while (modem.available()) {
      String line = modem.readStringUntil(&#039;\n&#039;);
      line.trim();
 
      if (line.length() &gt; 0) {
        Serial.println(&quot;URC: &quot; + line);
      }
 
      if (line.startsWith(token)) {
        return line;
      }
    }
  }
  Serial.println(&quot;Timeout beim Warten auf URC: &quot; + String(token));
  return &quot;&quot;;
}


void setup() {
  Serial.begin(115200);
 
  delay(1000);
  Serial.println(&quot;Serial connection ready&quot;);
 
  modem.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
  modem.println(&quot;AT&quot;);

  
}
 
void loop() {
  while (modem.available()) {
    String resp = modem.readStringUntil(&#039;\n&#039;);
    resp.trim();
    if (resp.length() &gt; 0) {
      Serial.println(&quot;Modem: &quot; + resp);
    }
  }
 
  static unsigned long lastRun = millis() - 18000;
  if (millis() - lastRun &gt; 20000) {
    lastRun = millis();
 
    modem.println(&quot;AT+CSSLCFG=\&quot;enableSNI\&quot;,0,1&quot;); // SNI für SSL config ID 0 aktivieren
    
    modem.println(&quot;AT+HTTPINIT&quot;);
    
    modem.println(&quot;AT+HTTPPARA=\&quot;URL\&quot;,https://phil.cossnet.de/lte_modul_test.html&quot;); // Kleine selbstgehostete Test-HTML-Datei
    modem.println(&quot;AT+HTTPACTION=0&quot;);
 

    String response = waitForURC(&quot;+HTTPACTION&quot;, 5000); // Auf Antwort warten, offenbar dauert es bei HTTPS länger als bei HTTP
    if (response.length() &gt; 0) {
      modem.println(&quot;AT+HTTPHEAD&quot;);
      modem.println(&quot;AT+HTTPREAD=99999&quot;);
    }
 
    delay(200);
    modem.println(&quot;AT+HTTPTERM&quot;);
  }
}
</pre></div>]]></content:encoded>
					
					<wfw:commentRss>https://datort.de/raspberry-arduino/1113/arduino-esp-simcom-a7670e-lte-modul/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Technik Nostalgie: Quix News 1 Pager</title>
		<link>https://datort.de/featured/863/technik-nostalgie-quix-news-1-pager/</link>
					<comments>https://datort.de/featured/863/technik-nostalgie-quix-news-1-pager/#respond</comments>
		
		<dc:creator><![CDATA[datort]]></dc:creator>
		<pubDate>Fri, 13 Dec 2024 17:22:28 +0000</pubDate>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Retro Tech]]></category>
		<category><![CDATA[Youtube]]></category>
		<category><![CDATA[Mobilfunk]]></category>
		<category><![CDATA[Retro]]></category>
		<guid isPermaLink="false">https://datort.de/?p=863</guid>

					<description><![CDATA[Im Jahre 1995 waren Mobiltelefone in Deutschland noch eher was besonderes, fast ein Luxusgut. Die monatlichen Preise waren&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Im Jahre 1995 waren Mobiltelefone in Deutschland noch eher was besonderes, fast ein Luxusgut. Die monatlichen Preise waren hoch, die Preise für Gesprächsminuten ebenso. SMS konnten zu dieser Zeit noch nicht alle Geräte versenden oder empfangen. Und so existierte eine feine Nische für Pager. Neben TeLMI, Scall und Skyper gab es im Laufe der Zeit auch die Pager von Quix, einem Dienst betrieben von der Miniruf GmbH aus Hannover.  </p>


<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><a href="https://datort.de/featured/863/technik-nostalgie-quix-news-1-pager/"><img decoding="async" src="https://datort.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FMZd4oQCUqW0%2Fmaxresdefault.jpg" alt="YouTube Video"></a><br /><br /><figcaption></figcaption></figure>


<p>Zu der Zeit war ich 12 Jahre und begeistert von der Möglichkeit, das mein kleiner Pager an der Hose überall wo ich war plötzlich losgehen könnte und mich mit einer persönlichen Nachricht über etwas informieren könnte oder ich dank den kostenfreien DPA-Meldungen etwas spannendes aus der weiten Welt erfahren würde. Zugegeben, aufgrund der hohen Gebühren scheuten sich potentielle Nachrichten Verfasser eher mir etwas mitzuteilen und so bimmelte es eher wenn die DPA sich meldete. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-1024x576.jpg" alt="" class="wp-image-867" srcset="https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-1024x576.jpg 1024w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-300x169.jpg 300w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-768x432.jpg 768w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-1536x864.jpg 1536w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-380x214.jpg 380w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-800x450.jpg 800w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1-1160x653.jpg 1160w, https://datort.de/wp-content/uploads/2024/12/quix_news_5_quix_news_1.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Quix News 5 &amp; Quix News 1</figcaption></figure>



<p>Gefunkt wurde auf 448,475 MHz mit dem <a href="https://de.wikipedia.org/wiki/Radio-paging_code_No._1" target="_blank" rel="noreferrer noopener nofollow">POCSAG-Protokoll</a>. Deutschland wurde dabei von Quix in 5 Zonen eingeteilt. Als Nutzer musste man mitteilen, in welcher man sich befand damit dort die Aussendung der Nachrichten stattfinden konnte. Textnachrichten durften dabei bis zu 117 Zeichen lang sein, also nicht mehr so lang wie eine einfache SMS. Apropos SMS: Anders als bei einer SMS, die bei ausgeschaltetem Gerät oder im Funkloch beim Anbieter darauf wartet an den Nutzer übertragen zu werden, waren &#8222;Quixe&#8220; einfach verloren wenn man gerade mal nicht &#8222;auf Empfang&#8220; war. Einer der größten Nachteile der Technik. </p>



<p>Wollte man eine Nachricht aufgeben, so hatte man gleich 2 Hürden: Zum einen kostete es bis zu 2,40 Mark eine Textnachricht loszuwerden. Zum anderen musste man mit Menschen reden! Zwar war der Versand später auch via BTX, Windows-Software oder Fax möglich. Aber gerade zum Start bestand die einfachste Möglichkeit darin, einen Operator anzurufen dem man dann die Nachricht diktierte. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://datort.de/wp-content/uploads/2024/12/quix_news_1-1024x576.jpg" alt="" class="wp-image-865" srcset="https://datort.de/wp-content/uploads/2024/12/quix_news_1-1024x576.jpg 1024w, https://datort.de/wp-content/uploads/2024/12/quix_news_1-300x169.jpg 300w, https://datort.de/wp-content/uploads/2024/12/quix_news_1-768x432.jpg 768w, https://datort.de/wp-content/uploads/2024/12/quix_news_1-1536x864.jpg 1536w, https://datort.de/wp-content/uploads/2024/12/quix_news_1-380x214.jpg 380w, https://datort.de/wp-content/uploads/2024/12/quix_news_1-800x450.jpg 800w, https://datort.de/wp-content/uploads/2024/12/quix_news_1-1160x653.jpg 1160w, https://datort.de/wp-content/uploads/2024/12/quix_news_1.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">1999 &#8222;quixt&#8220; an: Mein Quix News 1 &#8211; mit Nachrichten aus der Vergangenheit</figcaption></figure>



<p>Richtig alt wurde das Ganze nicht: Die SMS fand schnell weitere Verbreitung. Sie war etwas günstiger, konnte von Handy zu Handy geschickt werden und sie war eben auch zuverlässiger. So geriet das Geschäftsmodell der Pager bereits 1998 in Schieflage, konnte aber nochmal gerettet und bis Ende 2001 fortgeführt werden. Seitdem gehört die Technik zumindest in der breiten Maße zum alten Eisen. Funkamateure nutzen die alten Pager teils noch im Hobbybereich und es mag sicher auch noch andere Dienste geben, bei denen Pager von Nutzen und im Einsatz sind. Aber vermutlich werden viele der nach 2000 geborenen heutzutage nicht mal mehr wissen, wozu so ein Gerät eigentlich gut war. </p>



<p>In meinem Video habe ich meinen alten &#8222;Quix News 1&#8220; wiederbelebt. Damals hat der gute 149,- Mark gekostet. Und tatsächlich hat all die Jahre noch eine alte Nachricht im Speicher des Quix überlebt&#8230; </p>
]]></content:encoded>
					
					<wfw:commentRss>https://datort.de/featured/863/technik-nostalgie-quix-news-1-pager/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>T-Mobile G1/HTC Dream im Retro-Unboxing</title>
		<link>https://datort.de/retro-tech/528/t-mobile-g1-htc-dream-im-retro-unboxing/</link>
					<comments>https://datort.de/retro-tech/528/t-mobile-g1-htc-dream-im-retro-unboxing/#respond</comments>
		
		<dc:creator><![CDATA[datort]]></dc:creator>
		<pubDate>Sun, 03 Dec 2023 14:03:28 +0000</pubDate>
				<category><![CDATA[Retro Tech]]></category>
		<category><![CDATA[Youtube]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Mobilfunk]]></category>
		<category><![CDATA[Retro]]></category>
		<category><![CDATA[Technik]]></category>
		<guid isPermaLink="false">https://datort.de/?p=528</guid>

					<description><![CDATA[Ende des ersten Jahrzehnts der 2000er-Jahre geschah so einiges auf dem Markt für Mobiltelefone: Das erste iPhone kam&#8230;]]></description>
										<content:encoded><![CDATA[
<p>Ende des ersten Jahrzehnts der 2000er-Jahre geschah so einiges auf dem Markt für Mobiltelefone: Das erste iPhone kam &#8217;07 heraus, das einstige Urgestein wenn es um Handys ging &#8211; Nokia &#8211; verpasste den Trend und legte somit den Grundstein für den eigenen Untergang in der Consumer Handysparte. Andere wollten das Stück vom Kuchen haben und gingen stattdessen mit dem Trend: So brachte Google Ende &#8217;08, also ein Jahr nach Apples iPhone, ihr erstes Android-Telefon auf den Markt. </p>


<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><a href="https://datort.de/retro-tech/528/t-mobile-g1-htc-dream-im-retro-unboxing/"><img decoding="async" src="https://datort.de/wp-content/plugins/wp-youtube-lyte/lyteCache.php?origThumbUrl=%2F%2Fi.ytimg.com%2Fvi%2FJAT-hiGvkY8%2Fmaxresdefault.jpg" alt="YouTube Video"></a><br /><br /><figcaption></figcaption></figure>


<p>Das T-Mobile G1 oder auch HTC Dream genannte Gerät wurde nicht von Google selbst entwickelt. Google lieferte mit Android Cupcake &#8222;nur&#8220; das Betriebssystem, welches Apples iOS Konkurrenz machen sollte. In Deutschland war das Geräte übrigens exklusiv bei der Telekom zu haben und das auch erst im Frühjahr 2009. </p>



<p>Das G1 verfügt über eine eingebaute Tastatur, die sich unter dem Bildschirm befindet. Neben diesen gibt es auf der Frontseite noch weitere Tasten, z.B. für die Rufannahme. Auch ist ein Trackball vorhanden, aus heutiger Sicht eher ungewöhnlich. Das Display konnte 480&#215;320 Pixel darstellen, die Qualcomm-CPU war mit 528 MHz getaktet und wurde mit einem ARM11-Chipsatz befeuert. Der eingebaute Speicher war mit nur 256 MB recht klein, was auch der Grund gewesen sein soll, warum nach Android 2.1 mit weiteren Updates Schluß war. Über eine SD-Karte konnte aber zumindest der Speicherplatz für Fotos, Videos oder MP3s entsprechend vergrößert werden. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="613" src="https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-1024x613.png" alt="" class="wp-image-534" srcset="https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-1024x613.png 1024w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-300x180.png 300w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-768x460.png 768w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-1536x920.png 1536w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-380x228.png 380w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-800x479.png 800w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung-1160x695.png 1160w, https://datort.de/wp-content/uploads/2023/12/htc_dream_ovp_verpackung.png 1730w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Gefunkt wurde damals im 2G- (GSM) und 3G-Netz (UMTS). Im Download erreichte das HTC Dream bis zu 7.2 Mbit/s mit HSPA-Unterstützung. Damit lies es sich bereits gut arbeiten, solange man noch Inklusiv-Volumen hatte. So bot der größte Tarif bei der Telekom damals maximal 1 GB Download-Kontingent. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="778" src="https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-1024x778.png" alt="" class="wp-image-530" srcset="https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-1024x778.png 1024w, https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-300x228.png 300w, https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-768x584.png 768w, https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-380x289.png 380w, https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-800x608.png 800w, https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff-1160x881.png 1160w, https://datort.de/wp-content/uploads/2023/12/t-mobile.de_2009_g1_tariff.png 1170w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Damals waren Mobilfunk-Tarife deutlich teurer: Für 119,95 bekam man HSDPA-Nutzung (Internetvolumen) inklusive &#8211; im Kleingedruckten wird erklärt was &#8222;inklusive&#8220; bedeutet: 1 GB Highspeed-Volumen (t-mobile.de Anfang 2009 via archive.org)</figcaption></figure>



<p>Ich konnte für dieses Unboxing ein Exemplar auftreiben, welches noch gänzlich unbenutzt, original verpackt und verschlossen war. Eine große Herausforderung war dabei, das T-Mobile G1 bzw. HTC Dream überhaupt ans Laufen zu bekommen: Die vorinstallierte Android-Version verlangte nach einem Google-Account. Doch weder das Anlegen eines neuen Accounts noch das Einloggen mit einem bestehenden sind heute im Jahre 2023 noch möglich. Im Netz findet man alte Artikel aus 2009 und später mit unterschiedlichen Lösungsansätzen: So soll man es mit Backup-Codes oder App-Codes für den eigenen Google-Account probieren. Weiter wird der Tipp gegeben auf eine RC29- (USA) oder RC7 -Version (UK) downzugraden. Hier soll über ein Bug die ADB-Schnittstelle zu aktivieren sein. Die lassen sich aber auf die EU-Version des G1 offenbar nicht aufspielen. Außerdem ist die Rede von einer Goldcard, welche ermöglichen würde beliebige Software auf dem G1 zu installieren. Viele Ansätze, von denen bei mir leider keiner funktionierte. </p>



<p>Meine Lösung: Der Versuch auf eine neuere Version mit von Google signierten Paketen upzudaten. Denn die sollten sich im Wartungsmodus (Home-Button + Power) mit ALT + L laden lassen. Nur wo bekommt man die her? Google hat zwar ein Archiv, aber da war wenig nützliches. Außerdem brachen viele der Downloads mittendrin ab. Bei Google stieß ich mit der Suche nach dem richtigen Dateinamen &#8222;signed-kila_eu-ota-146733.53218c9e_full_update.zip&#8220; auf exakt einen Eintrag. Offenbar hat jemand damals glücklicherweise die alten Updates inkl. einer Anleitung bei sich lokal gemirrored: <a href="http://juliusbeckmann.de/static/android/htc-dream-g1-flash-files-german/" target="_blank" rel="noreferrer noopener">juliusbeckmann.de</a></p>



<p>Wenn ihr das in Bewegtbild sehen möchtet, schaut gerne in das YouTube-Video oben. Das Ergebnis: Nach dem Update poppte plötzlich ein &#8222;Überspringen&#8220;-Button im Setup-Dialog auf. Natürlich kann damit noch immer keine Dienste nutzen, welche einen Google-Login benötigen, aber die meisten davon werden eh schon nicht mehr kompatibel mit dem HTC Dream sein. </p>



<p>Alles andere konnte ich mir aber nun in Ruhe anschauen und so einen Einblick gewinnen, wie es gewesen sein muss, mit dem ersten Android-Telefon unterwegs zu sein. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://datort.de/retro-tech/528/t-mobile-g1-htc-dream-im-retro-unboxing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
