【ServiceNow】物理ボタンの情報を基盤システムに連携してみた【IoT】

【ServiceNow】物理ボタンの情報を基盤システムに連携してみた【IoT】

はじめに

ServiceNow×RaspberryPi こんにちは、マサヒロです。ServiceNowのテクニカルコンサルタントとして、技術的な問題を解決し、お客様の業務全般を支えています。
コンピュータシステムをこよなく愛し、システムに携わることが私のライフワークにもなっています。

今回、表題になっている企画するきっかけとなったのは、2018年年初に、当時の事業部長が
“IoTを用いてサービスを作り上げないか?機材購入を支援する”
と募集をかけたことです。

自分の業務のServiceNowと、IoTのRaspberry PIをつなげることを思いつき、IoT企画に参画しました。
この記事では、自分の取り組みを紹介します!

<他のIoT企画はコチラ!>
【IoT】MESH使ってIoTやってみまっし!
【IoT】MESH使ってIoTやってみまっし! ~番外編~
【IoT】MESH使ってIoTやってみまっし! ~その2~
【IoT】Sigfoxネットワークで「百葉箱クラウド」作ってみた
【IoT】Google Home+Raspberry Pi+学習リモコンで家電操作してみた

今回使う技術の紹介

ServiceNowとは?

ServiceNowは、クラウド上で動く業務アプリケーションです。
ServiceNowの特徴は何といってもその柔軟性にあります。ServiceNow上で動く、多種多様なアプリを組み合わせることで、あらゆる業務に対応できます。
高度な技術と先進的な考えがServiceNowを支えています。

Raspberry Piとは?

Raspberry Piは、「ワンボードマイコン」と呼ばれる小さなコンピュータです。どのくらい小さいかというと、今回使ったRaspberry Pi Zero Wはフリスクの箱程度の大きさです。
  • ・安価(2,000円程度)で購入できる
  • ・簡単なプログラムで入出力端子を制御できるので、電子工作に向いている
  • ・開発環境もそろっている
  • ・Linuxがインストールできるので、サーバやデスクトップパソコンの代わりに使うことも可能
といった特徴があり、勉強教材としても人気があります。
Raspberry Piにはいくつかシリーズがありますが、小さく安く通信ができる、Raspberry Pi Zero Wを今回は選びました。
Raspberry Pi Zero W Raspberry Pi Zero W

どんなものを作ったのか?

今回作ったのは「手元のボタンを押すと、その回数をServiceNowに記録し、ServiceNowがお知らせランプを光らせる仕組み」です。
完成品のRaspberry Pi部分は、こちらになります。
完成品 Raspberry PiとServiceNowの連携システム(完成品)
【流れ】
  • ・物理スイッチ(ボタン)を押すと、Raspberry Piが「どのボタンが」「何回」「いつ」押されたのかをServiceNowに送ります。
  • ・ServiceNowはRaspberry Piから送られてきた情報を、集計し記録します。
  • ・ServiceNowが外部連携し、押されたボタンの情報をもとに、ランプを光らせます。
ServiceNowを間に挟むことで、情報を記録できることと、どの内容を元にどのランプを光らせるのか柔軟に制御できるのが本品の魅力です。
例ではボタンとランプが1対1になっています。ですが、ボタンの押した回数や押したボタンの種類に従って、光らせるランプの種類をServiceNowが制御することが可能です。
ボタンとランプに意味を持たせれば、「(メールが見れない相手に)用事があるよ」と連絡したりと、使い方は多様です。
誰が何回押したかの情報がServiceNowに覚えさせられるので、ボタン連打して、上司に(あいつ何も言わないけれどストレス感じてるのかな…?)とアピールすることもできます。

作り方

大まかな連携イメージです。
構成図 連携イメージ
プログラムはPythonで記述しました。わずか数十行で動くので楽々でした。
  ソースコードをみる
import RPi.GPIO as GPIO
import time
from datetime import datetime
import mysql.connector

conn = mysql.connector.connect(user="*******",password="*******",host="localhost", database="midserver")
cur = conn.cursor()

SWITCH_P = 18
LED_P = 21
led_value = GPIO.LOW

GPIO.setmode(GPIO.BCM)
GPIO.setup(SWITCH_P, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(LED_P, GPIO.OUT)

def callback_change_switch(ch):
	global led_value
	print("callback", ch)
	if ch != SWITCH_P: return
	if led_value == GPIO.LOW:
		GPIO.output(LED_P, GPIO.HIGH)
		led_value = GPIO.HIGH
		print("HIGH")
		str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
		cur.execute("INSERT INTO timetable (time, no, name) VALUES ('"+str+"','1','midserver');")
		conn.commit()
	else:
		GPIO.output(LED_P, GPIO.LOW)
		led_value = GPIO.LOW
		print("LOW")
		str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
		cur.execute("INSERT INTO timetable (time, no, name) VALUES ('"+str+"','1','midserver');")
		conn.commit()

GPIO.add_event_detect(
	SWITCH_P,
	GPIO.RISING,
	callback=callback_change_switch,
	bouncetime=200)

GPIO.output(LED_P, GPIO.LOW)

try:
	while True:
		time.sleep(0.1)
except KeyboardInterrupt:
	GPIO.cleanup()

cur.close
conn.close


ボタンカウント情報はMaria DBに記録しました。
Raspberry PiとServiceNowの間にMaria DBを挟み、MariaDBからServiceNowへの連携をJava製アプリの「MID Server」を使って、ノンコーディングでRaspberry PiとServiceNowとを連携させようという試みです。
MID ServerはLinuxでも動くのでRaspberry Piで制御できること、またMID ServerはServiceNowの標準機能で簡単に設定できることが、選んだ理由でした。
ここまでノンプログラミングで簡単に進んでいましたが、この選択がドツボにはまりました。
Raspberry PiはARM CPUを搭載しているのですが、MID ServerはARM CPU向けの環境を想定して作られていなかったため、実行環境設定を細かく変更しなければならなかったのです。
(設定の詳細はここでは割愛します。)
ですが、そこからはスムーズにことが運びました。Raspberry Piから受け取った情報をServiceNowで受け取ってからは、ServiceNowのテーブルとして、画面にフォーム表示やリスト表示ができるので、初期設定のままでも十分使えました。
ここからServiceNowをカスタマイズしてグラフ化してレポート出力する等の加工も、ServiceNowならGUIで簡単に行えます。

ServiceNowからMID Server経由でRaspberry Piにコマンドを送るのも、ServiceNowのトリガーとなる動作の箇所にScriptを記述するだけで簡単に連携できます。
今回はやりませんでしたが、ServiceNowから遠隔操作でRaspberry Piを初期化したり、完全に破壊することも簡単です。

使ってみての感想

Raspberry PiとServiceNowを連携させた事例は少なく、良い取り組みになったと自負しています。
今回ハマった「MID ServerでARM CPU向けの環境設定する方法」は、ServiceNowの事例として、英語と日本語で世界に発信しました。
事業部内のIoT企画発表で盛り上がったのもよい思い出です。
こういう取り組みはぜひ続けていきたいです。

最後に

ServiceNowは情報連携のシステム基盤として認識されていますが、IoTとつなげることで、物理的にシステムとつながり、企業システムの一元管理に大いに役立つと確信しました。
最近、ServiceNowではAIも扱えるようになりました。ServiceNowがシステム化できる範囲は、この記事を読んでいるあなたが想像しているよりも、ずっと広い。
ServiceNowが実現できる具体的なソリューションについては、またどこかで。

最後に、IoT企画を立案した、角田前事業部長に感謝の意を表して、この記事を終わりといたします。ありがとうございました。
マサヒロ
Follow マサヒロ:

2016年中途入社。ServiceNow Technical Consultantの鬼。ServiceNowで困った時はこの人に聞け!! ServiceNowチームの頼りになるお兄さん(?)。休日は神出鬼没。自宅から半径約20km以内をあちこち歩きながら、AI、機械学習、仮想現実、ITのトレンドについて考えています。