Archiv der Kategorie: Open Source

MQTT, Node-RED & Blockchain

Und noch eine Kopplung eines IoT Systems mit einer Blockchain …

Ich hoffe, es wird nicht langweilig. Aber mein lieber Kollege M. wollte es unbedingt sehen: „Zeig mir doch, wie man mit Node-RED in die Blockchain schreiben kann, aber getriggert über MQTT, wenn’s geht.“

Also gut:

Die zu protokollierenden Daten werden über einen MQTT Publisher an einen MQTT Broker gesendet. Ich verwende hier als Broker das (Opensource) System von Mosquitto.org.

MQTT & Node-RED & Blockchain – Übersicht

In Node-RED sorgt ein simpler Flow dafür, dass die Daten, die über den MQTT Subscriber eintreffen, nach einer Umformatierung der Json-Datenstruktur über WebSockets an den IoT-Interface Node gesendet werden.

Node-RED – Blockchain – Flow

Der Interface Node (auch bereits beim IoT-Demo und beim Alexa Demo verwendet) nimmt die Daten entgegen und …

Node-RED – Blockchain – Interface Node

… protokolliert sie dann in der Blockchain. Hier verwende ich natürlich wieder meinen Favoriten, die Multichain!

Multichain-Stream „DeviceLog“, der die von Node-RED und den anderen Demos eingetragenen Daten beinhaltet.

Aja … der MQTT Publisher: Da gibt es mehrere Möglichkeiten. Um es schnell und einfach zu machen, habe ich ein fertiges Beispiel genommen (https://github.com/CloudMQTT/python-mqtt-example/) und (in den Zeilen 58 und 60) den Url und das Topic entsprechend angepasst.

Und das war es auch schon …

LG an Kollegen M. 😉

Blockchain – Internet of Things

In einem Proof of Concept wird hier gezeigt, wie ich eine bidirektionale Kopplung einer Blockchain mit dem „Internet of Things“ (d.h. mit IoT-Devices) implementiert habe.

Von Blockchain Nodes können „Assets“ an IoT-Devices gesendet werden, welche dann entsprechend reagieren. Ein „Asset“ kann als „Wert“ (ähnlich einer Währung) gesehen werden, auf dessen Basis das IoT-Device eine Aktion durchführt, z.B. ein bestimmte Leistung für eine bestimmte Zeit erbringt.

Unabhängig davon kann das IoT-Device bei bestimmten Ereignissen (z.B. Sensorinputs) entsprechende Daten in der Blockchain protokollieren lassen.

Die Blockchain Technologie sorgt in diesem Aufbau also einerseits für die dezentrale Übermittlung der Daten zwischen den Systemteilnehmern (peer to peer), andererseits für die unveränderliche Protokollierung aller entsprechenden Aktionen (Steuerbefehl, Antwort darauf) und zusätzlicher Ereignisse (Sensoren).

In diesem Setup wird eine „permissioned Blockchain“ verwendet, d.h. es sind nur bekannte (authentifizierte) Systemteilnehmer zugelassen.

Systemaufbau

Blockchain – IoT Kopplung – Übersicht

Blockchain

Als Blockchain-Technologie wird eine entsprechend konfigurierte Installation von „Multichain“ eingesetzt, die seit Kurzem als Version 1.0 gelaunched wurde. Das System muss aus (mindestens) zwei Nodes bestehen, hier als Seednode und IoT-Interface Node bezeichnet. Ein Echtsystem besteht natürlich aus mehreren weiteren Nodes.

Seednode

Der Seednode ist der „erste“ Node der hier verwendeten Blockchain und stellt u.a. die initialen Konfigurationsdaten zur Verfügung. Der Node kann über ein Web-GUI angesprochen werden:

MultiChain Web-GUI – Anzeige der Nodes

Damit können die Aktionen komfortabler als über die Commandline erledigt werden: Senden der Assets und Beauskunften der Streams.

IoT-Interface Node

Auf diesem Node läuft ein Script, welches bei definierten Ereignissen in der Blockchain (z.B. Empfang von Assets) aufgerufen wird, mit dem IoT-Device per WebSockets kommuniziert und Rückmeldungen von diesem in „Streams“ in der Blockchain protokolliert.

Seednode: Senden von Assets an den Interface-Node

Unabhängig davon kann das IoT-Device weitere Daten an den Interface Node senden, der die entsprechenden Einträge in den Blockchain Streams erzeugt.

IoT-Device

Der Demoaufbau verwendet als IoT Device einen Rasperry Pi 3B. Auf diesem läuft ein WebSocket-Client, welcher mit dem Interface Node kommuniziert und die Steuerungsaufgabe ausführt, wie das Schalten der Aktoren (z.B. Lampe für die gewünschte Zeitdauer) und das Einlesen der Sensoren.

Rasperry Pi 3 mit Sense Hat als IoT Device

Stream „DeviceLog“ – Protokollierung von Meldungen des IoT Devices

In einem nächsten Schritt soll – in Zusammenarbeit mit DI Uwe Schimon von der IVM GmbH – das System um Smart Contracts auf Basis Ethereum erweitert werden.

Stay tuned!

Bitcoin Full Node on Raspberry Pi

Last week I bought a Raspberry Pi 3 (model B) to set up a proof of concept of a Blockchain connection to IoT devices (but that’s another story) …

Some time ago I read http://www.raspberrypifullnode.com/ and decided, to give it a try now.
This posting will not repeat everything from David’s article, just the changes from then (2014) to now (9/2017).

Micro SD card: The Bitcoin blockchain has a size of around 145 GByte at the moment, which leaves a 256 GB cards as an option, if you really want to store the complete blockchain …

Operating system: As I didn’t have NOOBS at hand, I downloaded the current version of Raspbian Stretch here and used Etcher to „burn“ the image to th SD card.

During the first boot, I connected a monitor and a keyboard, then configured the WiFi and activated the ssh deamon using

sudo raspi-config

After a

sudo reboot

I had a fully working system, which I could control with Putty (and WinSCP).

Now I followed David’s article, but had to apply some changes due to changes in the Bitcoin source. After updating and upgrading with

sudo apt-get update
sudo apt-get upgrade


I installed the dependencies …

sudo apt-get install build-essential autoconf libssl-dev libboost-dev libboost-chrono-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libtool libevent-dev

… and then downloaded the current version (branch 0.15) of the Bitcoin source:

mkdir ~/bitcoin
cd ~/bitcoin
git clone -b 0.15 https://github.com/bitcoin/bitcoin.git
cd bitcoin/

The building took „some“ time …

./autogen.sh
./configure --disable-wallet
make
sudo make install

… but in the end everything was OK.

Remark: I chose to build the node with –disable-wallet, as I did not care to run a wallet on the system. See the discussion here concerning Berkley DB 4.8 and incompatible wallet formats …

After starting the deamon with

bitcoind &

it started to connect to other nodes and sync the blockchain …

Voilà – all up and running 😉

MultiChain – offene Plattform für Blockchain Anwendungen

Vor etwa eineinhalb Jahren hatte ich schon einmal das Vergnügen, die MultiChain Plattform des englischen Unternehmens Coin Sciences Ltd. zu evaluieren. Vor etwas mehr als einem Monat wurde die Version 1.0 offiziell gelauncht, siehe https://www.multichain.com/blog/2017/08/multichain-1-released-new-partners/.

Grund genug, die aktuelle Version anzutesten und … ich bin begeistert! Die stabile Plattform war ja schon zuvor als extrem flexibel bekannt, d.h. dass mit den vielfältigen Parametrierungsmöglichkeiten eine große Anzahl von Usecases (im Speziellen für permissioned Blockchains) abgedeckt werden kann.

Was weiters sehr gefällt, ist die extrem gute Dokumentation und das engagierte Entwicklerteam, welches bei eventuellen Fragen oder Problemchen stets flott weiterhilft.

Einen Schwerpunkt legte ich auf das Ausprobieren der APIs. Für alle möglichen Umgebungen stehen auf Github Libraries und Demos bereit, ich testete das PHP-API mit dem Web-Demo, siehe https://github.com/MultiChain/multichain-web-demo.

GUI MultiChain Demo / API Test

Das Web-Demo selbst ist zwar etwas verbesserungswürdig, was etwa den Umfang der Funktionen betrifft, die RPC Aufrufe des Deamons sind aber extrem performant. Kein Wunder, ist es doch eine native C/C++ Implementierung (auf Basis des Bitcoin Clients).

Die Argumentation der Entwickler, dass sich mit den in dieser Plattform eingesetzten „Assets“ und „Streams“ eine Vielzahl von Anwendungen realisieren lassen, für die man heutzutage (unnötigerweise?) Smart Contracts einsetzen würde, ließ mich dann auch noch schmunzeln.

Mal sehen, wie es weitergeht …

WalletGenerator erweitert

Der universelle Generator für Walletadressen, Paper-, Bulk- und Brainwallets von WalletGenerator.net kennt jetzt auch die Parameter meiner Kryptowährung C2coin.

WalletGenerator.net mit C2coin Erweiterung

Der erweiterte Generator kann nun Wallets für 130 Kryptowährungen generieren und ist zu finden unter http://coinz.at/walletgenerator/.

Die Version ist ein Fork von https://github.com/MichaelMure/PaperWallet/archive/master.zip

coinz.at – Umstieg auf uNOMP

Die bisher bei coinz.at verwendete Pool-Software Stratum-Mining ist ja schon etwas in die Jahre gekommen, daher wurde der DEM-Pool auf die moderne Lösung uNOMP umgestellt.

coinz_at_20161118

Basis für uNOMP ist ein node.js Server und eine Redis No-SQL Datenbank, das System läuft seit einigen Wochen problemlos und hoch performant.

Update 11/2016: Das Tempo der Entwicklungen in diesem Sektor ist enorm! uNOMP gilt seit 10/2016 als „deprecated“ und wird durch „node merged pool“ ersetzt, coinz.at wird also demnächst wieder upgedated …

Kurzparken in Wien

Mit Onlinemaps, Libraries dazu & dem Thema OpenData beschäftige ich mich ja schon viele Jahre. Kürzlich musste ich im Zuge eines Projektes mein Know-How wieder auf den letzten Stand bringen. Ich baute dazu eine Minianwendung, die die Darstellung der Kurzparkzonen und -streifen in Wien ermöglicht.

Nach Öffnen des Links zur Anwendung wird die Wien Karte dargestellt. Es kann der aktuelle Standort dargestellt werden (Pin links oben), falls der Webbrowser bzw. das Device die Ortung erlauben. Kurzparkzonen werden blau dargestellt, Kurzparkstreifen rot. Ein Klick auf eine Zone oder einen Streifen öffnen ein Informationsfenster mit Details.

kurzparken_wien

Verwendete Technologien:

Ich nutze das Service selbst sehr oft, hat mir schon ein paar Mal ein Strafmandat wegen Nichtbeachtung der (in Wien teilweise recht verwirrenden) Kurzparkregeln erspart 😉

Viel Spaß damit!

Update: Die Anwendung ist auch auf https://www.data.gv.at/anwendungen/ gelistet.

Cheater ausgesperrt …

Das Problem beschäftigte Betreiber von (sha256 und quark) Mining Portalen monatelang: Die „fake hash vulnerability“. Damit konnte jemand, der einigermassen erfahren mit Kryptowährungen, Linux, Python, Stratum-Mining etc. ist, Mining Portale, die mit der gängigsten Software Version arbeiteten, betrügen. D.h. Shares uploaden, die nur durch Software generiert wurden und eine extrem hohe „Difficulty“ vorspiegeln. Eine Difficulty, die ausschliesslich mit spezieller Hardware erreicht werden kann.

Nach ein paar nächtlichen Recherchen, Debug Sessions und Tests an einigen Echtsystemen konnte ich den (eigentlich recht banalen) Fehler finden …

Und natürlich auch beheben und die Community informieren: https://github.com/Crypto-Expert/stratum-mining/issues/353

Recht interessant, wie ein „kleiner“ Bug in ein System einen Fehlerfaktor von 65535 hineinbringt. Traurig hat mich aber gemacht, dass der Entwickler sich mit „… habe ich eh gewusst … sah aber keinen Grund, das zu fixen …“ äusserte. Tja.

Jedenfalls können durch diesen Fix Cheater, die Kryptowährungen in unbekannter Höhe abgegriffen haben von den Stratum Servern automatisch erkannt und ausgesperrt werden.

Wie geht es weiter? Der Nachfolger von stratum-mining ist UNOMP. Schaue ich mir auch mal an. UNOMP bzw. die Vorgängerversion NOMP und diverse Forks davon werden weltweit x 100 oder 1000 mal eingesetzt.

Uiiii … der nächste Kandidat.

C2coin – Windows Wallet

Das C2coin Netz läuft jetzt seit einigen Tagen problemlos. Es wurde also Zeit, dass ich mich auch um eine Windows-Version der Software kümmere.

Diverse Recherchen im Web ergaben, dass das Compilieren der Binaries für Windows eine ziemliche Herausforderung darstellen soll. Und so war es auch …

Es dauerte mehrere Stunden, bis ich mich mit den beteiligten Komponenten halbwegs anfreunden konnte:

  • Die „Toolchain“ (Entwicklungsumgebung): MinGW, MSYS und Qt mit qmake, mingw32-make, G++ C-Compiler usw.
  • Die „Dependencies“ (notwendige Libraries): Berkeley-DB, Openssl und die Boost-Library.

Einige Stunden (und Fehlversuche) später war es dann soweit: Sowohl die „headless“ Version (c2coind.exe), als auch die GUI-Version (c2coin-qt.exe) wurden fehlerfrei übersetzt.

C2coin Windows Wallet

C2coin Windows Wallet

War jedenfalls eine interessante Herausforderung …

Downloads: Wallet für WindowsCoindeamon für Windows
Installation/Konfiguration: Readme
Kurzanleitung Mining mit Grafikkarten: Mining with GPUs

C2coin – meine eigene Kryptowährung

Mit Kryptowährungen beschäftige ich mich ja schon einige Zeit, irgendwann ist die Idee aufgekommen, auch eine „eigene“ zu entwerfen. Und es sollte natürlich wirklich eine eigene Coin werden und nicht nur ein Plagiat aus einem Altcoingenerator …

Also ging es ans Festlegen der Parameter, das Klonen des Litecoin Codes, Aufsetzen der Entwicklungsumgebung, Bearbeiten des Sourcecodes und schließlich ans Generieren des „Merkle-Hashes“, die Basis für das Erstellen (Mining) des „Genesis-Blocks“ – der Anfang einer neuen Blockchain.

In den Genesis-Block wird üblicherweise eine Information eingetragen, die am Tag der „Geburt“ eines Coins in den Medien zu finden war. Ich fand diese Meldung der Tageszeitung „Der Standard“ interessant:

Ausschnitt aus dem Genesis-Block

Ausschnitt aus dem Genesis-Block

Das Erstellen der Binaries unter Linux ging dann recht problemlos von der Hand, die Binaries unter Windows zu compilieren ist eine andere Geschichte, davon werde ich noch berichten …

GUI-Wallet unter Linux

GUI-Wallet unter Linux

Wozu das Ganze? Einerseits wollte ich einfach wissen, ob ich es kann. Darüber hinaus sehe ich es als Plattform für zukünftige Entwicklungen (z.B. proof-of-concepts) für Module im „Cryptocoin Ökosystem“ …

Der Code des Projektes ist auf Github zu finden.