Veri Al

Iot cihazından gönderilen ısı, nem, voltaj, ışık gibi değerleri iothook data servisinden çekebilmek için öncelikle cihaz API KEY bilgisine ihtiyaç vardır. Iot cihazından gelen veriler, Arduino, Raspberry Pi, Android, iOS gibi mobil cihazınızdan veya web sitenizden izlenebilir.

Örneğin; Cihaz adımız “Temperature sensor” olarak belirlenmiş ve cihaz içerisinde bulunacak sensörlerimiz “temperature” ve “humidity” olsun.

Python 2, Python 3 Json ile Veri Alma

Python Json ile Get Örneği:

IOTHOOK sunucusundan requests.get metodu kullanılarak results ile belirtilen sayı kadar veri okuması yapılmıştır. results değişkeni ile en fazla 99 adet veri okunabilir. results değişkeni belirtilmez ise sadece 1 veri okunabilir. Okunan verinin formatı json şeklindedir.

Aşağıdaki Python scriptinin çalıştırılması ile şu çıktı elde edilir.

>>> [{'id': 502483, 'device': 17, 'field_1': '46', 'field_2': '6.70', 'field_3': None, 'field_4': None, 'field_5': None, 'field_6': None, 'field_7': None, 'field_8': None, 'pub_date': '2019-08-31T00:57:27.086837', 'remote_address': '88.242.132.150&python-requests/2.12.4&HTTP/1.1'}]
>>> 1
>>> 502483

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

# -*- coding: utf-8 -*-

"""
  Python 2, Python 3 ile IoThook REST Api Testi

  Bu ornek IotHook servisine veri almak/gondermek icin baslangic seviyesinde
  testlerin yapilmasini amaclamaktadir.

  10 Mayıs 2017
  Guncelleme: 19 Agustos 2019
  Sahin MERSIN

  Daha fazlasi icin

  http://www.iothook.com
  ve
  https://github.com/electrocoder/iotHook

  sitelerine gidiniz.

  Sorular ve destek talepleri icin
  https://github.com/electrocoder/iotHook/issues
  sayfasindan veya Meşe Bilişim den yardım alabilirsiniz.

  Yayin : http://mesebilisim.com

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  A copy of the License is located at

  http://www.apache.org/licenses/

"""

import requests

# read api key
API_KEY = 'ceb0024b84ff6fb7527d5506' # demo hesap #17 random test

url = 'http://iothook.com/api/device/?api_key=' + API_KEY + "&results=1"

response = requests.get(url)
data = response.json()
print(data)
print(len(data))
print(data[0]['id'])

Python 2, Python 3 Json ile İlk Veriyi Alma

Python İlk Veriyi Alma, Json ile Get Örneği:

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

# -*- coding: utf-8 -*-

"""
  Python 2, Python 3 ile IoThook REST Api Testi

  Bu ornek IotHook servisine veri almak/gondermek icin baslangic seviyesinde
  testlerin yapilmasini amaclamaktadir.

  10 Mayıs 2017
  Guncelleme: 19 Agustos 2019
  Sahin MERSIN

  Daha fazlasi icin

  http://www.iothook.com
  ve
  https://github.com/electrocoder/iotHook

  sitelerine gidiniz.

  Sorular ve destek talepleri icin
  https://github.com/electrocoder/iotHook/issues
  sayfasindan veya Meşe Bilişim den yardım alabilirsiniz.

  Yayin : http://mesebilisim.com

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  A copy of the License is located at

  http://www.apache.org/licenses/

"""

import requests

# read api key
API_KEY = '76d2628fd60903d3c1f7f8a0' # demo hesap #24 Temperature sensor

url = 'https://iothook.com/api/device/?api_key=' + API_KEY + "&results=2"

response = requests.get(url)
data = response.json()
print(data)
print(data['datas'][0]['id'])
print(data['datas'][0]['pub_date'])
print(data['datas'][1]['id'])
print(data['datas'][1]['pub_date'])

Python 2, Python 3 Json ile Son Veriyi Alma

Python Son Veriyi Alma, Json ile Get Örneği:

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

# -*- coding: utf-8 -*-

"""
  Python 2, Python 3 ile IoThook REST Api Testi

  Bu ornek IotHook servisine veri almak/gondermek icin baslangic seviyesinde
  testlerin yapilmasini amaclamaktadir.

  10 Mayıs 2017
  Guncelleme: 19 Agustos 2019
  Sahin MERSIN

  Daha fazlasi icin

  http://www.iothook.com
  ve
  https://github.com/electrocoder/iotHook

  sitelerine gidiniz.

  Sorular ve destek talepleri icin
  https://github.com/electrocoder/iotHook/issues
  sayfasindan veya Meşe Bilişim den yardım alabilirsiniz.

  Yayin : http://mesebilisim.com

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  A copy of the License is located at

  http://www.apache.org/licenses/

"""

import requests

# read api key
API_KEY = '76d2628fd60903d3c1f7f8a0' # demo hesap #24 Temperature sensor

url = 'https://iothook.com/api/device/?api_key=' + API_KEY

response = requests.get(url)
data = response.json()
print(data)
print(data['datas'][0]['id'])
print(data['datas'][0]['pub_date'])

C# ile Json Formatında Veri Alma

IoThook kullanıcısının cihazına ait veriyi alabilmesi için GET metodu kullanılarak Postman ile üretilmiştir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

/*
  C# ile IoThook REST Api Testi

  Bu örnekde CSharp ile cihaz datalarının get metodu ile alınması gerçekleştirilmiştir.

  Bu ornek IotHook servisine veri almak/gondermek icin baslangic seviyesinde
  testlerin yapilmasini amaclamaktadir.

  29 Temmuz 2017
  Guncelleme: 19 Agustos 2019
  Sahin MERSIN

  Daha fazlasi icin

  http://www.iothook.com
  ve
  https://github.com/electrocoder/iotHook

  sitelerine gidiniz.

  Sorular ve destek talepleri icin
  https://github.com/electrocoder/iotHook/issues
  sayfasindan veya Meşe Bilişim den yardım alabilirsiniz.

  Yayin : http://mesebilisim.com

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  A copy of the License is located at

  http://www.apache.org/licenses/
*/

// demo hesap #24 Temperature sensor

var client = new RestClient("https://iothook.com/api/device/?api_key=76d2628fd60903d3c1f7f8a0&results=1");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Connection", "keep-alive");
request.AddHeader("Accept-Encoding", "gzip, deflate");
request.AddHeader("Host", "iothook.com");
request.AddHeader("Postman-Token", "ce2f06c2-817e-414a-8c7a-2c2fc59ad043,af31a3d8-02e4-49eb-b78f-05ebdce70149");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Accept", "*/*");
request.AddHeader("User-Agent", "PostmanRuntime/7.15.2");
IRestResponse response = client.Execute(request);

GO ile IOT Veri Alma

IoThook kullanıcısının cihazına ait veriyi alabilmesi için GET metodu kullanılarak Postman ile üretilmiştir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://iothook.com/api/device/?api_key=76d2628fd60903d3c1f7f8a0&results=1"

    req, _ := http.NewRequest("GET", url, nil)

    req.Header.Add("User-Agent", "PostmanRuntime/7.15.2")
    req.Header.Add("Accept", "*/*")
    req.Header.Add("Cache-Control", "no-cache")
    req.Header.Add("Postman-Token", "ce2f06c2-817e-414a-8c7a-2c2fc59ad043,8a0938fc-5c87-459a-9b9f-fa6aebe561f2")
    req.Header.Add("Host", "iothook.com")
    req.Header.Add("Accept-Encoding", "gzip, deflate")
    req.Header.Add("Connection", "keep-alive")
    req.Header.Add("cache-control", "no-cache")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

JAVA ile IOT Veri Alma

IoThook kullanıcısının cihazına ait veriyi alabilmesi için GET metodu kullanılarak Postman ile üretilmiştir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://iothook.com/api/device/?api_key=76d2628fd60903d3c1f7f8a0&results=1")
  .get()
  .addHeader("User-Agent", "PostmanRuntime/7.15.2")
  .addHeader("Accept", "*/*")
  .addHeader("Cache-Control", "no-cache")
  .addHeader("Postman-Token", "ce2f06c2-817e-414a-8c7a-2c2fc59ad043,bdcd2494-5109-4621-8256-296e0c6a4fad")
  .addHeader("Host", "iothook.com")
  .addHeader("Accept-Encoding", "gzip, deflate")
  .addHeader("Connection", "keep-alive")
  .addHeader("cache-control", "no-cache")
  .build();

Response response = client.newCall(request).execute();

PHP ile IOT Veri Alma

IoThook kullanıcısının cihazına ait veriyi alabilmesi için GET metodu kullanılarak Postman ile üretilmiştir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

<?php

$request = new HttpRequest();
$request->setUrl('https://iothook.com/api/device/');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'api_key' => '76d2628fd60903d3c1f7f8a0',
  'results' => '1'
));

$request->setHeaders(array(
  'cache-control' => 'no-cache',
  'Connection' => 'keep-alive',
  'Accept-Encoding' => 'gzip, deflate',
  'Host' => 'iothook.com',
  'Postman-Token' => 'ce2f06c2-817e-414a-8c7a-2c2fc59ad043,dfad2e87-d4a1-4657-a5b6-183c4604c818',
  'Cache-Control' => 'no-cache',
  'Accept' => '*/*',
  'User-Agent' => 'PostmanRuntime/7.15.2'
));

try {
  $response = $request->send();

  echo $response->getBody();
} catch (HttpException $ex) {
  echo $ex;
}

Ruby ile IOT Veri Alma

IoThook kullanıcısının cihazına ait veriyi alabilmesi için GET metodu kullanılarak Postman ile üretilmiştir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

require 'uri'
require 'net/http'

url = URI("https://iothook.com/api/device/?api_key=76d2628fd60903d3c1f7f8a0&results=1")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["User-Agent"] = 'PostmanRuntime/7.15.2'
request["Accept"] = '*/*'
request["Cache-Control"] = 'no-cache'
request["Postman-Token"] = 'ce2f06c2-817e-414a-8c7a-2c2fc59ad043,8fe93ff6-b857-4978-838e-2d8efac2e6b6'
request["Host"] = 'iothook.com'
request["Accept-Encoding"] = 'gzip, deflate'
request["Connection"] = 'keep-alive'
request["cache-control"] = 'no-cache'

response = http.request(request)
puts response.read_body

Javascript Ajax ile IOT Veri Alma

IoThook kullanıcısının cihazına ait veriyi alabilmesi için GET metodu kullanılarak Postman ile üretilmiştir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://iothook.com/api/device/?api_key=76d2628fd60903d3c1f7f8a0&results=1",
  "method": "GET",
  "headers": {
    "User-Agent": "PostmanRuntime/7.15.2",
    "Accept": "*/*",
    "Cache-Control": "no-cache",
    "Postman-Token": "ce2f06c2-817e-414a-8c7a-2c2fc59ad043,27a5bb35-4b13-48b2-8dbd-efe7188a68c6",
    "Host": "iothook.com",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "keep-alive",
    "cache-control": "no-cache"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

Python PySide2 ile IOT Veri Alma

PySide2, Qt nin Python projelerinde Qt 5.12+ framework e erişimini sağlayan resmi Python modülüdür. PySide2 yi kullanmadan önce yüklenmesi gereken modüller şu şekildedir.

$ pip install matplotlib

$ pip install numpy

$ pip install PySide2

Python kütüphanelerinin yükleme işlemi pip ile yapılmıştır. Sisteminizde pip yüklü değil ise https://bootstrap.pypa.io/get-pip.py adresine giderek dosyayı bilgisayarınıza kaydediniz ve çalıştırınız.

Biz burada PySide2 ve matplotlib kullanarak oluşturduğumuz Window içerisinde gelen verileri grafik olarak göstereceğiz.

Script çalıştırıldığında aşağıdaki gibi bir pencere görmemiz gerekiyor.

pyside2-matplotlib-iothook.png

Bu örnekde QT Designer kullanılarak arayüz tasarımı yapılmıştır. Widget için Promote to … seçeneği ile MplWidget sınıfı kullanılmıştır. Bu örneği hazırlamada manap.se Manap ve yapayzekalabs.blogspot.com Yapayzekalabs sitelerinden faydalandım. Bu sitelerde daha fazla kaynak bulabilirsiniz.

Test işlemi IoThook da bulunan 230 id numaralı 5 channel test isimli cihaz ile yapılmıştır.
Bu cihaz demo kullanıcısına aittir.

Bu örneğe ve diğerlerine IOTHOOK Git sayfasından ulaşabilirsiniz.

iothook.ui dosyası:

iothook.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>689</width>
    <height>553</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <layout class="QGridLayout" name="gridLayout">
   <item row="0" column="0">
    <widget class="QLabel" name="label">
     <property name="text">
      <string>Read API KEY</string>
     </property>
    </widget>
   </item>
   <item row="0" column="1">
    <widget class="QLineEdit" name="lineEdit"/>
   </item>
   <item row="0" column="2">
    <widget class="QPushButton" name="pushButton">
     <property name="text">
      <string>Connect</string>
     </property>
    </widget>
   </item>
   <item row="1" column="0" colspan="3">
    <widget class="MplWidget" name="MplWidget" native="true"/>
   </item>
  </layout>
 </widget>
 <customwidgets>
  <customwidget>
   <class>MplWidget</class>
   <extends>QWidget</extends>
   <header>mplwidget.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

iothook.py dosyası:

iothook.py
import requests
from PySide2.QtWidgets import *
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QTimer

from matplotlib.backends.backend_qt5agg import (
    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)

from matplotlib.figure import Figure

import numpy as np
import random


class MplWidget(QWidget):

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.canvas = FigureCanvas(Figure())

        vertical_layout = QVBoxLayout()
        vertical_layout.addWidget(self.canvas)
        vertical_layout.addWidget(NavigationToolbar(self.canvas, self))

        self.canvas.axes = self.canvas.figure.add_subplot(111)
        self.setLayout(vertical_layout)


class MainWidget(QWidget):

    def __init__(self):
        QWidget.__init__(self)

        designer_file = QFile("iothook.ui")
        designer_file.open(QFile.ReadOnly)
        loader = QUiLoader()
        loader.registerCustomWidget(MplWidget)
        self.ui = loader.load(designer_file, self)
        designer_file.close()

        self.setWindowTitle("IOTHOOK")

        self.field_1_list = []
        self.field_2_list = []
        self.field_3_list = []
        self.field_4_list = []
        self.field_5_list = []
        self.field_6_list = []
        self.field_7_list = []
        self.field_8_list = []

        self.lineEdit = self.ui.findChild(QLineEdit, 'lineEdit')
        self.pushButton = self.ui.findChild(QPushButton, 'pushButton')

        self.pushButton.clicked.connect(self.result)

        grid_layout = QGridLayout()
        grid_layout.addWidget(self.ui)
        self.setLayout(grid_layout)

    def result(self):
        self.timer = QTimer()
        self.timer.setInterval(5000)
        self.timer.timeout.connect(self.status)
        self.timer.start()

    def status(self):
        print("update")
        # read api key
        # API_KEY = '4c8f1e0277c7f694e698739b'  # demo #230 5 channel test
        API_KEY = self.lineEdit.text()
        if API_KEY:
            self.pushButton.setText("Stop")
            url = 'http://iothook.com/api/device/?api_key=' + API_KEY + "&results=1"
            response = requests.get(url)
            data = response.json()
            print(data)

            try:
                self.ui.MplWidget.canvas.axes.clear()
                self.field_title_list = []

                if data[0]['field_1']:
                    self.field_title_list.append('field_1')
                    self.field_1_list.append(data[0]['field_1'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_1_list)

                if data[0]['field_2']:
                    self.field_title_list.append('field_2')
                    self.field_2_list.append(data[0]['field_2'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_2_list)

                if data[0]['field_3']:
                    self.field_title_list.append('field_3')
                    self.field_3_list.append(data[0]['field_3'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_3_list)

                if data[0]['field_4']:
                    self.field_title_list.append('field_4')
                    self.field_4_list.append(data[0]['field_4'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_4_list)

                if data[0]['field_5']:
                    self.field_title_list.append('field_5')
                    self.field_5_list.append(data[0]['field_5'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_5_list)

                if data[0]['field_6']:
                    self.field_title_list.append('field_6')
                    self.field_6_list.append(data[0]['field_6'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_6_list)

                if data[0]['field_7']:
                    self.field_title_list.append('field_7')
                    self.field_7_list.append(data[0]['field_7'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_7_list)

                if data[0]['field_8']:
                    self.field_title_list.append('field_8')
                    self.field_8_list.append(data[0]['field_8'])
                    self.ui.MplWidget.canvas.axes.plot(self.field_8_list)

                self.ui.MplWidget.canvas.axes.legend((self.field_title_list), loc='upper right')
                self.ui.MplWidget.canvas.draw()

                self.repaint()
            except:
                pass


app = QApplication([])
window = MainWidget()
window.show()
app.exec_()