Archiv der Kategorie: PHP

Blockchain & IoT

Dieses Demo (erstellt für einen Workshop im Rahmen der Fachkonferenz Digitalisierung – IoT + Data Science) zeigt, wie man Leistungen von IoT-Devices über eine Blockchain „kaufen“ – d.h. bezahlen und ausführen lassen kann. Als „Leistung“ wird eine Lampe geschaltet, die „Bezahlung“ erfolgt mit einem „IoT-Light“-Token, welches mittels einer modernen Blockchainplattform (0bsnetwork.com) erstellt, gehandelt und übertragen wird.

Ein weiterer Teil demonstriert, wie Sensordaten des Devices über dieselbe Kommunikationsschnittstelle rückübertragen und in der Blockchain protokolliert werden können.

Die Komponenten dieses Demos sind:

Komponenten des Demos

Als IoT Device wird ein Raspberry Pi mit einem SenseHat-Modul verwendet, welches die Aktorik (LED-Feld als „Lampe“) und Sensorik (Joystick als Schalter) realisiert. Das Gerät stellt über WLAN eine WebSocket Verbindung zum Broker her.

Die IoT-Schnittstelle zwischen den Devices und einem Blockchain Client besteht aus einem WebSocket Broker und einem Client-Interface, welches die Blockchain auf Aktionen für bestimmte Walletadressen überwacht und die Daten über WebSocket an das IoT-Device weiterleitet. Hier ein Teil des Sourcecodes für ein solches Modul:

Als Blockchainumgebung wird in diesem Setup das TestNet des 0bsnetwork eingesetzt. Der Client bietet ein Web-GUI für die Walletfunktionen an: Den Handel mit den hier verwendeten „IoT-Light“ Tokens (gehandelt wird auf der „DEX“, der Decentralized Exchange) und das Senden der Token an das IoT-Device. Ein weiterer Node stellt die API Schnittstelle für das Client-Interface zur Verfügung, mit dem „Explorer“ können die Daten in der Blockchain (Blöcke, Transaktionen, Peers …) angesehen werden.

Ablauf

Auf der „DEX“ (integrierte Handelsplattform) werden die „IoT-Light“-Token für die Bezahlung des IoT-Devices gehandelt …

Handelsplattform für Token im 0bsnetwork

Über das Wallet werden Token an das IoT-Device (bzw. an seine Adresse 3Myh…) gesendet …

Senden von Token an das IoT-Device

Details zur Transaktion

Das Client-Interface …

… registriert die „Bezahlung“ für das Device, sendet ein Kommando an dieses und …

Rasperry Pi 3 mit Sense Hat als IoT Device

… das Device führt die bezahlte Leistung aus und schaltet Licht für die entsprechende Dauer ein.

Und das war es auch schon 😉

Digitalisierung: IoT + Data Science

Im Rahmen der Fachkonferenz Digitalisierung – IoT + Data Science am 7.11.2018 – wie immer perfekt veranstaltet von Seidler-Consulting – Danke, Joachim – hielten wir einen Workshop zum Thema „Was haben Blockchain-Anwendungen und IoT miteinander zu tun?“ ab. „Wir“, das waren Thom Kunz (Verein IoT Austria – The Austrian Internet of Things Network), Uwe Schimon (IVM GmbH) und ich.

Mein Part waren zwei Demos zum Thema „Blockchain & IoT“. Im ersten Demo zeigte ich, wie Daten von Sensoren (Temperatur, Luftfeuchte, Luftdruck), die über LoraWAN an einen MQTT Broker übermittelt wurden, von einem MQTT Client abonniert, empfangen und in einen Blockchain-Stream geschrieben werden.

Prozessdatenerfassung mit LoraWAN – Infrastruktur

Die IoT Sensoren, das LoraWAN und den MQTT Broker stellte die IVM GmbH zur Verfügung, den Rest (die Blockchain auf Basis MultiChain, die Scripts und die Darstellung mit plotly.js) steuerte ich bei. Abgesehen von der MQTT-Anbindung entspricht das Demo im Wesentlichen dem Aufbau der Air-Quality-Chain. Folgend ein Beispiel der Darstellung der Messdaten:

Beispiel für Darstellung der übermittelten Messdaten

Die Präsentation des Workshops kann übrigens hier heruntergeladen werden.

Im zweiten Demo ging es dann etwas detaillierter zur Sache …

Telegram Bot: Air Quality Vienna

Während der Entwicklung und dem Testbetrieb der Air-Quality-Chain (blockchainbasierte Lösung zur unveränderlichen Speicherung von Messdaten) baute ich im Rahmen eines anderen Projektes einen Proof-Of-Concept mit einem Telegram-Bot. Ich fand die Bot-Programmierung recht witzig und kam auf die Idee, mit der AQC protokollierte Umweltdaten auch per Telegram-Bot abzufragen.

Ich kombinierte also ein paar vorhandene Softwaremodule mit ein paar zig Zeilen neuem Code und … die erste Version des Bots war fertig, ich nannte ihn „Air Quality Vienna Bot“. Zugegeben, der Funktionsumfang ist noch recht bescheiden, in der ersten Version kann man nur die aktuellen Messwerte der 17 Wiener Umweltmessstationen abfragen. Ideen für neue Funktionen gibt es natürlich genug: Zeitreihenauswertungen, Mittelwerte, Maximalwerte, Benachrichtigungen bei Grenzwertüberschreitungen und so weiter. Mal sehen, wann ich dazu komme …

Der „Air Quality Vienna Bot“ ist übrigens unter https://t.me/AirQualityVienna_bot zu erreichen.

Der Screenshot zeigt die Liste aller vom Bot abfragbaren Messstellen, die aktuellen Messdaten und dazugehörigen Grenzwerte aus dem Immissionsschutzgesetz-Luft (IG-L) bzw. Informationsschwelle aus dem Ozongesetz (OzonG), weitere Details dazu siehe https://www.wien.gv.at/umwelt/luft/messwerte/grenzwerte.html.

Viel Spaß damit.

Update 1.10.2018: Die Anwendung ist jetzt auch auf data.gv.at – offene Daten Österreichs unter https://www.data.gv.at/anwendungen/telegram-bot-air-quality-vienna/ gelistet.

Datenquelle: Stadt Wien – data.wien.gv.at

„Proof Of Existence“ auf Basis Blockchain

Mittels „Proof Of Existence“ kann bewiesen werden, dass ein elektronisches Dokument zu einem bestimmten Zeitpunkt in einer bestimmten Form existiert hat (es wird auch der englische Begriff „Notarization“ dafür verwendet).
Dabei wird ein eindeutiger Fingerabdruck eines Dokumentes (der sog. Hashwert) errechnet und gemeinsam mit einem Zeitstempel unveränderbar protokolliert.
Wenn zu einem späteren Zeitpunkt der Beweis erbracht werden soll, dass das betreffende Dokument zum behaupteten Zeitpunkt bereits existiert hat, wird von dem Dokument erneut der Hashwert berechnet und mit den früher (unveränderbar) verspeicherten Daten verglichen.

Dieses Demo zeigt die Implementierung eines derartigen Systems auf Basis der Blockchain Technologie Multichain.

Zum Erstellen des Beweises wird ein Dokument ausgewählt. Das Dokument wird dabei nicht auf den Server hochgeladen, sondern der Hashwert wird lokal im Browser errechnet. Optional können weitere Informationen hinzugefügt werden, die mit gespeichert werden, den Hashwert jedoch nicht beeinflussen.

Berechnung des Hashwertes, Eingabe optionaler weiterer Informationen.

Nach dem Übermitteln der Formulardaten an den Server erstellt dieser eine Blockchain Transaktion, die die Daten beinhaltet und antwortet mit folgender Meldung:

Meldung des Systems nach Protokollierung der Daten in der Blockchain.

Damit wird angezeigt, dass in der Blockchaintransaktion (in diesem Beispiel die Transaktion mit der ID d919c006523ff32f38052014e09946ead08c6eb90c93341816884a17fcfaceb6) der errechnete Hashwert (in diesem Fall d8db6f0434544a62e04f5e7a121e2286f4e22dfcd7cab5d76c4c85dab79a80f5) plus Zusatzinformationen verspeichert wurden.

Wenn zu einem späteren Zeitpunkt ein entsprechender Beweis erbracht werden soll, muss die Transaktions-ID und/oder der Hashwert des Dokumentes an das System übergeben werden:

Verifikation der Daten mittels Transaktions ID und/oder Hashwert des Dokumentes.

Das System sucht in der Blockchain die entsprechende Transaktion und stellt die verifizierten Daten dar:

Darstellung der verifizierten Daten.

Die Transaktionsdaten beinhalten dabei den Hashert des Dokumentes, die optionalen Zusatzdaten und den Zeitstempel der Erstellung der Transaktion.

Zusätzlich wird darüber informiert, in welchem Block der Blockchain die Transaktion verspeichert wurde, den Zeitstempel des Blocks (Blocktime) und durch wie viele nachfolgende Blocks dieser Block bereits bestätigt wurde.

Natürlich kann der Beweis nicht nur durch dieses System (das ja auch den Eintrag erstellt hat) erbracht werden, sondern durch jeden anderen Node (=“Teilnehmer“) dieser Blockchain. Dazu kann z.B. der betreffende Block mit einem Blockexplorer gesucht werden …

Liste der Blocks in einem Blockexplorer.

… und die Transaktionsdaten gelesen (bzw. interpretiert) werden – in diesem Beispiel in Rohformat:

Notarization_TransactionDetails

Das vorgestellte System läuft noch im Testbetrieb, ich werde es aber demnächst freigeben.

16.11.2017: Das System ist unter https://blockchains.web-lab.at/poe/ zu erreichen.

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!

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 …

Online QR-Code Generator

Die Open Source Library PHP QR Code hatte ich schon in einigen Projekten in Verwendung. Jetzt habe ich sie mit einem GUI ausgestattet, mit dem man folgende Parameter setzen kann:

  • Level der Fehlerkorrektur (Rekonstruktion von 7% bis 30% beschädigter Daten)
  • Größe des QR-Codes in „Pixels per Point“ (Point entspricht einem Punkt des QR-Codes)
  • Größe des Rahmens in Points
  • Transparenz des Hintergrundes
Screenshot QR-Generator

Screenshot QR-Generator

Der QR-Code wird in PNG-Format generiert, zusätzlich werden die Rohdaten („Points“) in Textform ausgegeben.

Der Generator ist unter http://multidec.web-lab.at/qr/ zu erreichen, mein Fork ist auf GitHub.

Für weitere Projekte (Online- oder Offline Generierung von QR-Codes, Integration in Applikationen etc.) stehe ich gerne zur Verfügung.

Bitcoin Zahlungen über Coinbase

Seit 11.9.2014 ist die in den USA populäre Bitcoin-Plattform Coinbase auch in 13 europäischen Ländern, darunter auch Österreich, verfügbar (die Futurezone berichtete darüber).

Das habe ich zum Anlass genommen, mir die Möglichkeiten der Integration des Payment-APIs von Coinbase anzusehen und praktisch auszuprobieren (visit link).

coinbase_demo

Ich werde noch weitere Varianten erproben und in das Demo aufnehmen.

Stay tuned!

„MoWi“ – MObile WalletInfo

Ein Tool für alle, die mehrere Cryptocoin-Wallets (Bitcoin, Litecoin etc.) am Laufen haben und die Übersicht behalten wollen … und zwar immer und überall.

Funktionsweise: Ein Serverscript (PHP) verbindet sich zu den (im LAN erreichbaren) konfigurierten Wallets, frägt über die RPC API-Calls „getinfo“ und „getmininginfo“ die Daten ab und stellt sie auf einer mobilen Webseite (mit jQuery Mobile) zur Verfügung.

Screenshot_2014-09-30-12-26-17 Screenshot_2014-09-30-12-26-26

Der Zugriff auf diese Daten kann z.B. mit https und Userauthentifizierung geschützt werden. Das Tool ist im derzeit im Testbetrieb.