大阪近郊で活動するフリーランスエンジニアのブログです 技術情報とか趣味など

*

Raspberry Pi2で外部から水槽のLEDを点灯する その3

   

前回で自宅のラズパイ側の準備が整ったので今回はWeb上から電灯のON/OFFをする

点灯ボタンをつける

WordPressにBootstrapのボタンだけつけれないかと調べてみたらプラグインがあるらしいのでインストール ついでにjQueryとかも入れてもらった

その1で作った点灯用PHPをajaxで叩く
scriptタグがdivで囲われてるのはWordPress上の都合です

<button type="button" class="btn btn-primary" id="led"><span class="fa fa-bell-o" aria-hidden="true"></span> 点灯</button>
<div>
<script type="text/javascript">
$(function(){
  $('#led').click(
    function(){
      $.ajax({
        type: 'post',
        data: {
          'from': 'blog'
        },
        url: '点灯用phpの場所',
      });
    }
  );
});
</script>

パイ側の待ち受けを直す

# 接続します
client.connect do |c|
  # Subscribeします
  TOPIC = "*******@github/led"
  c.get(TOPIC) do |topic, message|
    `sudo /usr/local/bin/led-20sec` #←20秒点灯後けす
  end
end

sudoのパスワードを聞かないように修正

sudo visudo

ユーザー名 ALL=(ALL) NOPASSWD: /usr/local/bin/led-20sec

ひとまずこれでブログ上のボタンをポチポチすればライトが点灯するようになった
でもこのままではボタン連打されたりするとSangoに1ヶ月で送れるメッセージ数をオーバーしてしまう
点灯用PHP側でストッパーをかけることにした

ボタン連打対策

色々考えたけど面倒なのでデータベースを使うことにする

やる気の感じられないテーブル作成

CREATE TABLE `switch_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `on_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

DB設定

<?php
error_reporting(E_ALL & ~E_NOTICE);

function getPDO() {
    try {
        // MySQLサーバへ接続
        $pdo = new PDO("mysql:host=localhost; dbname=DB名", "ユーザー", "パスワード");
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        return $pdo;
    } catch(PDOException $e){
        return null;
    }
}
?>

点灯用PHP

<?php
if (!$_POST['from']) {
	exit;
}

require_once('./phpMQTT.php');
require_once('./db_conf.php');

$pdo = getPDO();

// 過去10秒以内で誰かスイッチを押したか
$cnt = $pdo->query('select count(*) as cnt from switch_log where on_at > (now() - interval 10 second)')->fetch(PDO::FETCH_ASSOC);

// 誰も押してなければスイッチON
if($cnt['cnt'] === 0) {
	$mqtt = new phpMQTT("tcp://lite.mqtt.shiguredo.jp", 1883, md5(time()));
	if ($mqtt->connect(null,null,'ユーザー名', 'パスワード')) {
		$mqtt->publish("ユーザー名/led",date("r"),0);
		$mqtt->close();
	}
}

// ログ登録
$pdo->prepare('insert switch_log value()')->execute();

$pdo = null;
?>

ok

できた!!

こちらで公開してますので是非覗いてみてください

 - php, Raspberry Pi, ruby, アクアリウム, 金魚 , , , ,

  • このエントリーをはてなブックマークに追加
  • にほんブログ村 観賞魚ブログ 金魚へ

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  関連記事

プラ舟はじめました

プラ船買っちゃった 金魚にだだハマりなGW ついにプラ船買ってガレージに設置して …

Raspberry Pi2を使ってリモートで餌やりをする

ブログからガレージの金魚にエサをやる 以前からやろうやろうと先延ばしにしてたエサ …

みんなのラズパイコンテストにて受賞しました

ラズパイマガジンと日経Linux、日経ソフトウエア様の みんなのラズパイコンテス …

RaspberryPi2で動画配信しながら写真も撮りたい

金魚デカくなった? 金魚にエサやってると4月の初頭から飼い始めた琉金が1周り大き …

プラ船 復活しました

先日ネコに襲撃され破られた金網ですが、1枚ものの塩ビ板でフタをすることにしました …

プラ船の金魚がネコに襲撃された

ガレージに出してるプラ船がネコにやられました・・・ これはひどい どうもカメラを …

Raspberry Pi2で水槽のLEDを自動点灯/消灯する

先日Raspberry Pi2を購入し、自宅からのストリーミング配信する為あれこ …

Raspberry Pi2でPlanexのGW-450Dが動かなくなった

Raspberry Pi2上で何も考えずソフト類をアップグレードしたらカーネルの …

金魚水槽の照明をパワーアップさせたい

金魚水槽のページでON/OFFできるようにしている照明ですが、 やっぱ1Wパワー …

金魚が病気の為、隔離しました

配信中の金魚水槽ですが、金魚が病気で1匹死んでしまったので隔離しました メイン水 …