{"id":22316,"date":"2025-01-22T05:10:30","date_gmt":"2025-01-22T04:10:30","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=22316"},"modified":"2025-01-10T18:27:41","modified_gmt":"2025-01-10T17:27:41","slug":"bitcoin-solo-mining-auf-einem-esp-32-mit-nerdminer","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=22316","title":{"rendered":"Bitcoin Solo Lottery Mining auf einem ESP-32 mit Nerdminer und drei Miner-Pools"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/esp-32-wroom.jpeg\" alt=\"\" width=\"360\" height=\"640\" class=\"aligncenter size-full wp-image-22321\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/esp-32-wroom.jpeg 360w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/esp-32-wroom-169x300.jpeg 169w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/p>\n<p>Vor etwa <a href=\"http:\/\/blog.wenzlaff.de\/?p=8921\" target=\"_blank\">acht Jahren<\/a> habe ich schon einmal \u00fcber den <a href=\"http:\/\/blog.wenzlaff.de\/?p=8921\" target=\"_blank\">ESP-32<\/a> im Zusammenhang mit NodeMCU berichtet. Vor ein paar Tagen ist mir dieses kleine, aber leistungsf\u00e4hige Teil (Computer) wieder in die H\u00e4nde gefallen. Dabei habe ich herausgefunden, dass man mit dem ESP-32 sogar <a href=\"http:\/\/blog.wenzlaff.de\/?s=miner\" target=\"_blank\">Bitcoin minen<\/a> kann! Mal was anderes als Monero. Gesagt, getan &#8211; ich habe es ausprobiert. Hier m\u00f6chte ich auch einen Vergleich von drei Mining-Pools vorstellen und einen REST-Service in Java.<\/p>\n<p>Habe alles mit dem MacOS geflasht, geht aber auch analog mit Windows. Also erst den <a href=\"https:\/\/www.silabs.com\/developer-tools\/usb-to-uart-bridge-vcp-drivers?tab=downloads\" target=\"_blank\">Treiber<\/a> installieren.<\/p>\n<p>Starten der CP210x Driver App und beim Mac unter Allgemein- Anmeldeobjekte &#038; Erweiterungen unter Treibererweiterungen aktivieren nicht vergessen. <!--more--><\/p>\n<p>Dann die Firmwar flashen. Achtung! Es muss ein Kabel verwendet werden, das auch die Datenleitungen und nicht nur den Strom liefert. Das war bei meinen ersten Versuchen die Fehlerursache, warum auf dem Mac keine Verbindung m\u00f6glich war.<\/p>\n<p>Das flashen in Google Chrom, im privaten Fenster aufrufen: <a href=\"https:\/\/flasher.bitronics.store\/\" target=\"_blank\">https:\/\/flasher.bitronics.store\/<\/a>. Die Doku, was alles wie geht, siehe <a href=\"https:\/\/github.com\/BitMaker-hub\/NerdMiner_v2\" target=\"_blank\">NerdMiner Doku<\/a>.<\/p>\n<p>Nach einem Restart, f\u00e4ngt der Miner an zu sch\u00fcrfen.<\/p>\n<h3>Energie Verbrauch<\/h3>\n<p>Der ESP-32 braucht ca. 0,5 Watt und wenn er ein ganzes Jahr rund um die Uhr l\u00e4uft, ben\u00f6tigt er insgesamt:<\/p>\n<p>Berechnung des j\u00e4hrlichen Energieverbrauchs:\u2028\u2028Umgerechnet in Kilowattstunden (kWh):\u2028 <\/p>\n<p>0,5 W * 24 Stunden\/Tag * 365 Tage\/Jahr = 4380 W = 4,3 kWh<br \/>\n\ufeff<br \/>\nBerechnung der Kosten:\u2028Bei einem Strompreis von 0,30 \u20ac pro kWh:\u2028 4,38 kWh * 0,30 = 1,314 Euro<\/p>\n<p><strong>Ergebnis<\/strong>:<\/p>\n<p>\tJ\u00e4hrlicher Energieverbrauch: 4,38 kWh<br \/>\n\t<strong>Gesamtkosten: ca. 1,31 \u20ac<\/strong><\/p>\n<h2>Mining-Pool web.public-pool.io<\/h2>\n<p>Zuerst habe ich mal den Mining-Pool <a href=\"https:\/\/web.public-pool.io\/#\/\" target=\"_blank\">web.public-pool.io<\/a> eingestellt. Die Hash-Rate ist so <strong>ca. 50-70KH\/s<\/strong>, wie man hier sehen kann:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12.png\" alt=\"\" width=\"2592\" height=\"2030\" class=\"aligncenter size-full wp-image-22322\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12.png 2592w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12-300x235.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12-1024x802.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12-768x601.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12-1536x1203.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-12-2048x1604.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p><strong>Achtung<\/strong>! Der Anbieter der Seite\/Pool ist nicht ermittelbar (USA, <a href=\"https:\/\/dnschecker.org\/ip-whois-lookup.php?query=38.51.144.240\">(lookup 38.51.144.240)<\/a>), und auch der Domain-Eintrag ist nicht sichtbar. Auch ist der Pool nicht sehr alt. Das Domain Zertifikat l\u00e4uft am 27 Feb 2025 01:33:46 GMT ab. Also k\u00f6nnte es ein <a href=\"https:\/\/www.scamadviser.com\/check-website\/public-pool.io\" target=\"_blank\">Scam<\/a> sein. Ldt. <a href=\"https:\/\/www.scam-detector.com\/validator\/public-pool-io-review\/\" target=\"_blank\">Scam-Detector.com<\/a>: Suspicious. Unsafe. Doubtfull. Score 24.8 von 100. Also nicht damit rechnen, was zu bekommen. \ud83d\ude09<\/p>\n<h3>Solo-Mining-Rechner<\/h3>\n<p>Wie wahrscheinlich ist es mit solch einer Hash-Rate eine Block zu minen? Mal einen <a href=\"https:\/\/www.blocktrainer.de\/tools-services\/solo-mining-rechner\" target=\"_blank\">Online Rechner<\/a> daf\u00fcr verwendet:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-9.png\" alt=\"\" width=\"2032\" height=\"1452\" class=\"aligncenter size-full wp-image-22323\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-9.png 2032w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-9-300x214.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-9-1024x732.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-9-768x549.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerdminer-9-1536x1098.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Also, unm\u00f6glich, <a href=\"https:\/\/www.blocktrainer.de\/blog\/bitaxe-solo-miner-findet-erstmals-einen-bitcoin-block\" target=\"_blank\">oder doch nicht<\/a>!<\/p>\n<h2>Mining-Pool unmineable.com<\/h2>\n<p>Dann noch mal den <a href=\"https:\/\/unmineable.com\/?algorithm=sha256\" target=\"_blank\">unmineable.com<\/a> Pool getestet. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable.png\" alt=\"\" width=\"2182\" height=\"872\" class=\"aligncenter size-full wp-image-22328\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable.png 2182w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable-300x120.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable-1024x409.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable-768x307.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable-1536x614.png 1536w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/mineable-2048x818.png 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Der l\u00e4uft aber seit dem 6.1.2025 nicht mehr mit so kleinen Hash-Raten, da muss man schon einen schnelleren Miner haben, die kleinen werden leider nun ausgesperrt, weil der Schwierigkeitsgrad (diff) angehoben wurde. Das habe ich nach einigen testen erst festgestellt. Eigentlich schade, dann h\u00e4tte ich auch SOL oder andere Token minen k\u00f6nnen.<\/p>\n<h2>Mining-Pool pool.nerdminers.org<\/h2>\n<p>Ok, noch den &#8222;offiziellen&#8220; Mining-Pool <a href=\"https:\/\/pool.nerdminers.org\/\" target=\"_blank\">pool.nerdminers.org<\/a> \u00fcber Port 3333. Der hat aber nicht so eine sch\u00f6ne \u00dcbersicht.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner.png\" alt=\"\" width=\"2074\" height=\"2372\" class=\"aligncenter size-full wp-image-22324\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner.png 2074w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner-262x300.png 262w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner-895x1024.png 895w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner-768x878.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner-1343x1536.png 1343w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/nerd-miner-1791x2048.png 1791w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<p>Der liefert als User-Status nur vier Zeilen. Wer etwas mehr haben will, kann die Statistik \u00fcber <a href=\"https:\/\/pool.nerdminers.org\/users\/bc1qjgupwgqavr34cf2275ws7h6yx6hmaf8rp24s78\" target=\"_blank\">https:\/\/pool.nerdminers.org\/users\/bc1qjgupwgqavr34cf2275ws7h6yx6hmaf8rp24s78<\/a> aufrufen (eigene BTC ersetzen), dann kommt dieses JSon:<\/p>\n<pre class=\"lang:default decode:true \" >{\r\n \"hashrate1m\": \"70.5K\",\r\n \"hashrate5m\": \"60.1K\",\r\n \"hashrate1hr\": \"57.4K\",\r\n \"hashrate1d\": \"9.94K\",\r\n \"hashrate7d\": \"1.54K\",\r\n \"lastshare\": 1736521728,\r\n \"workers\": 1,\r\n \"shares\": 443.0,\r\n \"bestshare\": 0.05792322716563299,\r\n \"bestever\": 0.05792322716563299,\r\n \"authorised\": 1736504050,\r\n \"worker\": [\r\n  {\r\n   \"workername\": \"bc1qjgupwgqavr34cf2275ws7h6yx6hmaf8rp24s78.Kleinhirn\",\r\n   \"hashrate1m\": \"70.5K\",\r\n   \"hashrate5m\": \"60.1K\",\r\n   \"hashrate1hr\": \"57.4K\",\r\n   \"hashrate1d\": \"9.94K\",\r\n   \"hashrate7d\": \"1.54K\",\r\n   \"lastshare\": 1736521728,\r\n   \"shares\": 443.0,\r\n   \"bestshare\": 0.05792322716563299,\r\n   \"bestever\": 0.05792322716563299\r\n  }\r\n ]\r\n}\r\n<\/pre>\n<h3>Java Auswertung<\/h3>\n<p>Dazu habe ich dann eine Java-Swing Anwendung von gemacht:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/twnerd-miner.png\" alt=\"\" width=\"2036\" height=\"1564\" class=\"aligncenter size-full wp-image-22326\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/twnerd-miner.png 2036w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/twnerd-miner-300x230.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/twnerd-miner-1024x787.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/twnerd-miner-768x590.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2025\/01\/twnerd-miner-1536x1180.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/p>\n<pre class=\"nums:false minimize:true lang:java decode:true \" >package de.wenzlaff.twsolana;\r\n\r\nimport java.awt.BorderLayout;\r\nimport java.awt.FlowLayout;\r\nimport java.awt.Font;\r\nimport java.awt.event.ActionEvent;\r\nimport java.awt.event.ActionListener;\r\n\r\nimport javax.swing.JButton;\r\nimport javax.swing.JFrame;\r\nimport javax.swing.JLabel;\r\nimport javax.swing.JOptionPane;\r\nimport javax.swing.JPanel;\r\nimport javax.swing.JScrollPane;\r\nimport javax.swing.JTextArea;\r\nimport javax.swing.JTextField;\r\n\r\n\/**\r\n * BTC Gui.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\/\r\npublic class TWNerdMinersGui {\r\n\r\n\tprivate static String bitcoinAdresse = \"bc1qjgupwgqavr34cf2275ws7h6yx6hmaf8rp24s78\";\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\t\/\/ Erstelle das Hauptfenster\r\n\t\tJFrame frame = new JFrame(\"TWNerdMinders\");\r\n\t\tframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r\n\t\tframe.setSize(1024, 900);\r\n\r\n\t\t\/\/ Layout und Komponenten\r\n\t\tJPanel panel = new JPanel();\r\n\t\tpanel.setLayout(new BorderLayout());\r\n\r\n\t\t\/\/ Eingabefeld f\u00fcr den Worker-Namen\r\n\t\tJPanel inputPanel = new JPanel(new FlowLayout());\r\n\t\tJLabel bitcoinLabel = new JLabel(\"Bitcoin Adresse:\");\r\n\t\tJTextField bitcoinAdresseField = new JTextField(30);\r\n\t\tbitcoinAdresseField.setText(bitcoinAdresse);\r\n\t\tJButton fetchButton = new JButton(\"Abfrage\");\r\n\t\tinputPanel.add(bitcoinLabel);\r\n\t\tinputPanel.add(bitcoinAdresseField);\r\n\t\tinputPanel.add(fetchButton);\r\n\r\n\t\t\/\/ Textbereich f\u00fcr die Anzeige der Ergebnisse\r\n\t\tJTextArea resultArea = new JTextArea();\r\n\t\tresultArea.setEditable(false);\r\n\r\n\t\t\/\/ Aktuelle Schriftart abrufen\r\n\t\tFont currentFont = resultArea.getFont();\r\n\r\n\t\t\/\/ Neue Schriftart mit um 14 Punkte erh\u00f6hter Gr\u00f6\u00dfe erstellen\r\n\t\tFont newFont = currentFont.deriveFont((float) (currentFont.getSize() + 14));\r\n\r\n\t\t\/\/ Neue Schriftart setzen\r\n\t\tresultArea.setFont(newFont);\r\n\r\n\t\tJScrollPane scrollPane = new JScrollPane(resultArea);\r\n\r\n\t\t\/\/ Hinzuf\u00fcgen der Komponenten zum Hauptpanel\r\n\t\tpanel.add(inputPanel, BorderLayout.NORTH);\r\n\t\tpanel.add(scrollPane, BorderLayout.CENTER);\r\n\r\n\t\t\/\/ Hinzuf\u00fcgen des Panels zum Frame\r\n\t\tframe.add(panel);\r\n\r\n\t\t\/\/ Button-ActionListener\r\n\t\tfetchButton.addActionListener(new ActionListener() {\r\n\t\t\t@Override\r\n\t\t\tpublic void actionPerformed(ActionEvent e) {\r\n\t\t\t\tbitcoinAdresse = bitcoinAdresseField.getText().trim();\r\n\t\t\t\tif (!bitcoinAdresse.isEmpty()) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tStringBuilder resultBuilder = TWNerdMindersCmd.getResult(bitcoinAdresse);\r\n\t\t\t\t\t\tresultArea.setText(resultBuilder.toString());\r\n\t\t\t\t\t} catch (Exception ex) {\r\n\t\t\t\t\t\tJOptionPane.showMessageDialog(frame, \"Fehler beim Abrufen der Daten: \" + ex.getMessage(), \"Fehler\", JOptionPane.ERROR_MESSAGE);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tJOptionPane.showMessageDialog(frame, \"Bitte geben Sie eine g\u00fcltige Bitcoin-Adresse ein.\", \"Eingabefehler\", JOptionPane.WARNING_MESSAGE);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\t\/\/ Fenster sichtbar machen\r\n\t\tframe.setVisible(true);\r\n\t}\r\n}\r\n<\/pre>\n<p>und<\/p>\n<pre class=\"nums:false minimize:true lang:java decode:true \" >package de.wenzlaff.twsolana;\r\n\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.InputStreamReader;\r\nimport java.net.HttpURLConnection;\r\nimport java.net.URL;\r\n\r\nimport com.google.gson.JsonArray;\r\nimport com.google.gson.JsonElement;\r\nimport com.google.gson.JsonObject;\r\nimport com.google.gson.JsonParser;\r\n\r\n\/**\r\n * Abfrage der Bitcoin Minerdaten.\r\n * \r\n * @author Thomas Wenzlaff\r\n *\/\r\npublic class TWNerdMindersCmd {\r\n\r\n\tprivate static final String POOL_URL = \"https:\/\/pool.nerdminers.org\/users\/\";\r\n\r\n\tpublic static void main(String[] args) {\r\n\r\n\t\ttry {\r\n\t\t\tStringBuilder erg = getResult(args[0]);\r\n\t\t\tSystem.out.println(erg);\r\n\t\t} catch (IOException e) {\r\n\t\t\tSystem.err.println(e.getLocalizedMessage());\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static StringBuilder getResult(String bitcoinAdresse) throws IOException {\r\n\r\n\t\t\/\/ REST-API aufrufen und Daten abrufen\r\n\t\tString apiUrl = POOL_URL + bitcoinAdresse;\r\n\t\tString jsonResponse = fetchWorkerData(apiUrl);\r\n\r\n\t\t\/\/ JSON-Daten parsen und anzeigen\r\n\t\tJsonObject jsonObject = JsonParser.parseString(jsonResponse).getAsJsonObject();\r\n\t\tStringBuilder resultBuilder = new StringBuilder();\r\n\r\n\t\tresultBuilder.append(\"Hashrate 1m: \").append(jsonObject.get(\"hashrate1m\").getAsString()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Hashrate 5m: \").append(jsonObject.get(\"hashrate5m\").getAsString()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Hashrate 1hr: \").append(jsonObject.get(\"hashrate1hr\").getAsString()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Hashrate 1d: \").append(jsonObject.get(\"hashrate1d\").getAsString()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Hashrate 7d: \").append(jsonObject.get(\"hashrate7d\").getAsString()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Last Share: \").append(jsonObject.get(\"lastshare\").getAsLong()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Workers: \").append(jsonObject.get(\"workers\").getAsInt()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Shares: \").append(jsonObject.get(\"shares\").getAsDouble()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Best Share: \").append(jsonObject.get(\"bestshare\").getAsDouble()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Best Ever: \").append(jsonObject.get(\"bestever\").getAsDouble()).append(\"\\n\");\r\n\t\tresultBuilder.append(\"Authorised: \").append(jsonObject.get(\"authorised\").getAsDouble()).append(\"\\n\");\r\n\r\n\t\t\/\/ Worker-spezifische Informationen\r\n\t\tJsonArray workers = jsonObject.getAsJsonArray(\"worker\");\r\n\t\tfor (JsonElement workerElement : workers) {\r\n\t\t\tJsonObject worker = workerElement.getAsJsonObject();\r\n\t\t\tresultBuilder.append(\"Workername: \").append(worker.get(\"workername\").getAsString()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Hashrate 1m: \").append(worker.get(\"hashrate1m\").getAsString()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Hashrate 5m: \").append(worker.get(\"hashrate5m\").getAsString()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Hashrate 1hr: \").append(worker.get(\"hashrate1hr\").getAsString()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Hashrate 1d: \").append(worker.get(\"hashrate1d\").getAsString()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Hashrate 7d: \").append(worker.get(\"hashrate7d\").getAsString()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Last Share: \").append(worker.get(\"lastshare\").getAsLong()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Shares: \").append(worker.get(\"shares\").getAsDouble()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Best Share: \").append(worker.get(\"bestshare\").getAsDouble()).append(\"\\n\");\r\n\t\t\tresultBuilder.append(\"  Best Ever: \").append(worker.get(\"bestever\").getAsDouble()).append(\"\\n\\n\");\r\n\t\t}\r\n\t\treturn resultBuilder;\r\n\t}\r\n\r\n\tpublic static String fetchWorkerData(String apiUrl) throws IOException {\r\n\t\tURL url = new URL(apiUrl);\r\n\t\tHttpURLConnection connection = (HttpURLConnection) url.openConnection();\r\n\t\tconnection.setRequestMethod(\"GET\");\r\n\r\n\t\tint responseCode = connection.getResponseCode();\r\n\t\tif (responseCode == HttpURLConnection.HTTP_OK) {\r\n\t\t\tBufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));\r\n\t\t\tString inputLine;\r\n\t\t\tStringBuilder response = new StringBuilder();\r\n\r\n\t\t\twhile ((inputLine = in.readLine()) != null) {\r\n\t\t\t\tresponse.append(inputLine);\r\n\t\t\t}\r\n\t\t\tin.close();\r\n\t\t\treturn response.toString();\r\n\t\t} else {\r\n\t\t\tthrow new IOException(\"HTTP-Fehlercode: \" + responseCode);\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Der ganze Java-Code ist in meinem <a href=\"https:\/\/gitlab.com\/IT-Berater\/twsolana\">Gitlab-Repo<\/a> zu finden, auch mit einem Logger, der die Ergebnisse jede Minute in eine CSV-Datei schreibt. So kann man sich dann selbst Auswertungen erstellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vor etwa acht Jahren habe ich schon einmal \u00fcber den ESP-32 im Zusammenhang mit NodeMCU berichtet. Vor ein paar Tagen ist mir dieses kleine, aber leistungsf\u00e4hige Teil (Computer) wieder in die H\u00e4nde gefallen. Dabei habe ich herausgefunden, dass man mit dem ESP-32 sogar Bitcoin minen kann! Mal was anderes als Monero. Gesagt, getan &#8211; ich &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=22316\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eBitcoin Solo Lottery Mining auf einem ESP-32 mit Nerdminer und drei Miner-Pools\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5036,5027,4606,538,2305],"tags":[1183,4611,6096,3020,6105,6100,6098,6097,6099,6101,6104,6103,6102,6095],"class_list":["post-22316","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-bitcoin","category-blockchain","category-crypto","category-elektronik","category-esp8266","tag-bitcoin","tag-btc","tag-esp-32","tag-esp32","tag-lottery","tag-minen","tag-nerd-miner","tag-nerdminder","tag-pool","tag-pool-nerdminers-org","tag-scam","tag-unmineable-com","tag-web-public-pool-io","tag-wroom"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22316","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=22316"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/22316\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=22316"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=22316"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=22316"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}