SBM (Solar Bitcoin/Crypto-Currency Miner)

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche

Die Idee für das Projekt "Solar Bitcoin/Crypto-Currency Miner" (im Folgendem: SBM) entstand aus den Informationen, dass einerseits das Minen von Kryptowährungen in Deutschland nicht profitabel ist und dass die ersten staatlich geförderten Solaranlagen so langsam aus der staatlichen Förderung fallen und somit ebenfalls nicht mehr profitabel sind. Wir versuchen mit dem SBM diese beiden Probleme zu lösen, da Krypto-Miner selten auf erneuerbare Energien setzen.

Kryptowährungen[Bearbeiten]

Kryptowährungen sind digitale Zahlungsmittel, welche durch kryptographische Verfahren generiert werden. Dabei liegt der Fokus oft auf Dezentralisierung und Stabilität. Für die Stabilität wird bei den meisten Coins eine maximale Anzahl an Coins eingeführt. Die Dezentralisierung wird über viele weltweit verteilte Server gesichert, welche von unterschiedlichen Personen erstellt werden. Für weitere Informationen empfehlen wir den Wikipedia Artikel zum Thema Kryptowährungen. Eine Liste von Kryptowährungen ist in folgendem Artikel zu finden.

Monero[Bearbeiten]

Monero ist eine Kryptowährung mit sehr hohem Fokus auf Anonymität. So wird die komplette Blockchain, als auch die Transfers verschlüsselt. Um diese Anonymität zu gewährleisten, ist die oben erwähnte, strikte Dezentralisierung notwendig. Die Dezentralisierung wird allerdings durch ASIC-Miner gefährdet, da diese mit wenig Platz- als auch Energieaufwand, sehr viel Rechenleistung besitzen. Aus diesem und anderen Gründen wird etwa alle sechs Monate ein "Hard-Fork" durchgeführt. Durch den aktuellen Hard-Fork, welcher am 6. April 2018 stattfand, hat sich der Algorithmus zur Berechnung von Monero-Hashes geändert.

Die "Difficulty", also die Schwierigkeit zur Berechnung von Monero-Blöcken, ist sehr hoch und von Einzelsystemen nicht schnell genug berechenbar. Aus diesem Grund gibt es sogenannte Mining Pools. Dabei handelt es sich um Internetseiten, welche die erforderlichen Berechnungen auf möglichst viele Nutzer aufteilen und so die Difficulty gering halten. Jeder Nutzer bekommt nur einen kleinen Teil der komplexen Gleichungen zu lösen. Dadurch wird das Netzwerk besser unterstützt. Die meisten Pools zahlen ihren Nutzern entsprechend der N-letzten berechneten Hashes aus. Dabei steht N für eine, durch den Pool festgelegte, Anzahl an Hashes. Dadurch bekommt jemand mit einer größeren Hashrate mehr vom Blockreward (die Menge an Monero, die pro berechnetem Block ausgeschüttet wird), als jemand mit einer geringeren Hashrate. Für unser Projekt haben wir uns für den Pool supportxmr.com entschieden. Grund dafür ist die geringe Pool-Fee (Abgabe vom Blockreward an den Poolbetreiber), sowie eine geringe Difficulty von ca. 5000.

Hardware[Bearbeiten]

Aufbau des betriebsbereiten Systems, ohne funktionsfähigen Anschluss einer Solarzelle

Die Aufgabe des Minings übernimmt ein Raspberry Pi 3b+, die Sicherung der Messwerte übernimmt ein Raspberry Pi 3b. Die Messungen erfolgen über einen Arduino Uno. Dazu genutzt werden ein Amperemeter (ACS712) und zwei Voltmeter.

Einrichtung[Bearbeiten]

Als Betriebssystem kommt auf dem Miner Raspbian Lite zum Einsatz, um unnötige Prozessorlast zu vermeiden. Die Installation der Mining-Software wurde erfolgreich nach Anleitungen aus dem Internet durchgeführt. Der zweite RaspberryPi, welcher als Datenbankserver fungiert, nutzt ein vollständiges Raspbian, bei welchem die GUI zum Boot deaktiviert wurde.

Der Miner[Bearbeiten]

Auf der Suche nach einem geeigneten Mining-Script für den Raspberry Pi sind wir auf den CPU-Miner-Multi gestoßen, der zunächst auch auf unserem RPi im Einsatz war. Nach einigen generellen Tests mit dem Mining-Script mussten wir den Code anpassen, um bei "Erfolgsmeldungen" Daten wie z.B. die Hashrate vom RPi und die Strom- / Spannungswerte vom Arduino zu erhalten und zusammen in der SQLite-Datenbank auf dem Raspberry zu speichern.

Anpassungen nach Hard-Fork[Bearbeiten]

Durch den eingangserwähnten Hard-Fork wurde unser Miner am 06.04.18 unbrauchbar. Auf der Suche nach Alternativen sind wir auf die Software xmrig gestoßen. Dieser Miner stellt über einen integrierten HTTP-Server eine vollständige Statistik in Form einer JSON-Datei zur Verfügung. Da dieses System bei anderen Mining-Programmen auch zum Einsatz kommt, führt die Implementierung dieses Verfahrens in unser Projekt zu einer deutlich besseren Skalierbarkeit. Desweiteren konnte festgestellt werden, dass der Parallelbetrieb von Miner und Statistik-Logging zu einer schlechteren Mining-Performance führt. Daher lag die Vermutung nahe, die Messwerterfassung vom Mining zu trennen. Aufgrund der Struktur des Systems mit dem geändertem Aufbau und einem zweiten RPi, ist dies kein großes Problem.

Software[Bearbeiten]

Verwendete Bibliotheken[Bearbeiten]

Die Skripte, um die Daten in die Datenebank zu schreiben und um die Daten der App zur Verfügung zu stellen, benutzen einige, von Python3 standardmäßig installierte Bibliotheken. Zusätzlich genutzte Bibliotheken, sind nachfolgend aufgelistet.

Netifaces
Netifaces verwenden wir, um zu erkennen ob eine aktive WLAN oder LAN Verbindung besteht.
SMBus2
SMBus2 stellt uns das I2C Inteface zur Kommunikation mit dem Arduino zur Verfügung.

Geschriebene Skripte und Programme[Bearbeiten]

Es wurden Skripte zur Aufnahme der Daten in eine Datenbank geschrieben, sowie ein Webserver, um die Daten der App zur Verfügung stellen.

Für den Arduino wurde von uns ein Programm erstellt, welches auf Anfrage über I2C die Sensordaten bereitstellt.

Der vollständige Programmcode ist im Gitlab der HRW verfügbar.

Smartphone Applikation[Bearbeiten]

Anforderungen[Bearbeiten]

Aufgabe der App ist es, die Messwerte, welche sich als JSON-Datei auf dem Raspberry Pi befinden, möglichst benutzerfreundlich darzustellen. Die ermittelten Messwerte sollen lokal auf dem Smartphone gesichert werden, um diese auch dann einsehen zu können, wenn keine Verbindung zum Raspberry Pi besteht. Als Verbindungsart wählten wir einen Zugriff über ein lokales Netzwerk via WLAN.

Umsetzung[Bearbeiten]

Statt der Entwicklung einer Hybriden-Applikation haben wir uns für eine native iOS-Applikation entschieden. Dadurch wird u.a. eine gezieltere Umsetzung des geplanten Designs ermöglicht. Als Entwicklungsumgebung nutzten wird das Programm Xcode in der aktuellsten Version (9.2). Swift 4 wurde dabei als Programmiersprache genutzt. Eine kostenlos zur Verfügung stehende API der Seite Cryptocompare wird zum Abrufen des aktuellen Monero-Wertes (Kurs in EUR) eingesetzt.

Bibliotheken[Bearbeiten]

Intern[Bearbeiten]

UIKit[Bearbeiten]

Das Framework UIKit enthält die Basisklassen zur Gestaltung grafischer Benutzeroberflächen unter iOS. Bei der Entwicklung wurden u.a. die Klassen UICollectionView und UITableView verwendet.

CoreData[Bearbeiten]

CoreData dient zur persistenten Sicherung von Daten auf einem iOS-Gerät. Dazu musste u.a. ein Datenmodell als .xcdatamodel-Datei im App-Projekt angelegt werden.

Hashrate View

Extern[Bearbeiten]

SwiftCharts[Bearbeiten]

SwiftCharts bietet eine Vielzahl an Möglichkeiten Diagramme zu erstellen. Dieses Framework wurde mithilfe des Programms CocaPods im Projekt eingebunden.

Aufbau der App[Bearbeiten]

Übersicht Hashrate (Startseite)
Verbrauch / Engerieverwaltung

Um eine möglichst benutzerfreundliche Art der Navigation zu ermöglichen, haben wir uns für die Nutzung einer Tab Bar entschieden. Eine Tab Bar verbindet mehrere Ansichten, wobei die gerade aktive Ansicht über Icons in einer Symbolleiste am unteren Bildschirmrand ausgewählt wird.

Kalender-Ansicht
Optionen

Hashrate[Bearbeiten]

In dieser Ansicht werden lediglich Daten des jeweils aktuellen Tages berücksichtigt. Es werden neben der aktuellen Hashrate des letzten Eintrags, alle anderen Tagesdaten in einem Diagramm wiedergegeben.

Verbrauch[Bearbeiten]

Ähnlich wie in der ersten Ansicht, werden hier ebenfalls nur die Daten des aktuellen Tages berücksichtigt. Angezeigt wird hier der gesamte Netz- und Solarstromverbrauch. Dazu zählt der jeweilige prozentuale Anteil, sowie der Gesamtverbrauch.

Kalender[Bearbeiten]

Über einen Kalender bietet diese Ansicht die Möglichkeit, gezielt nach Daten eines bestimmten Tages zu suchen. Zudem kann man sich für jeden Tag eine Zusammenfassung anzeigen lassen.

Optionen[Bearbeiten]

Die letzte Ansicht dient dazu verschiedene Einstellungen an der App, wie z.B. die Eingabe der zu nutzenden Netzwerkadresse, vorzunehmen.