Androidで自動で値を収集して、それをレンサバにPOSTして、レンサバから自動でメール送信。
レンタルサーバーの設定
エックスサーバーのcronにスクリプトをフルパスで追加。
/home/xxx/xxx/script
のような感じにして、scriptのパーミッションは701に設定。
スクリプトの実体
tmp=`cat /xxx/xxx.txt`
echo “$tmp” | mail -s “title” mail@xxx.com
echo “” > /xxx/xxx.txt
これで、xxx.txtの値を定期送信する。
xxx.txtを作成するためのスクリプトは以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php class App{ private function main(){ if(array_key_exists("key",$_POST) && array_key_exists("lux", $_POST) && $_POST["key"] == "xxx") { $tmp = file_get_contents("xxx.txt"); file_put_contents("xxx.txt",$_POST["lux"]."\n".$tmp); } } public function __construct(){ $this->main(); } } new App; |
ここでは単純POSTを受け取ったら作成する。
送信するのはAndroid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
package com.example.sokamura.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.widget.TextView; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity implements SensorEventListener { SensorManager sm; TextView tv; MainActivity ma; String body = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.t); sm = (SensorManager)getSystemService(SENSOR_SERVICE); ma = this; Timer timer = new Timer(); timer.scheduleAtFixedRate( new TimerTask(){ @Override public void run(){ SubClass s = new SubClass(ma); s.execute(body); body = ""; } },0,1000*60*60*1);//1時間 } @Override protected void onStop() { super.onStop(); //sm.unregisterListener(this); } @Override protected void onResume() { super.onResume(); List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_LIGHT); if(sensors.size() > 0) { Sensor s = sensors.get(0); sm.registerListener(this, s, SensorManager.SENSOR_DELAY_UI); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) {} @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType() == Sensor.TYPE_LIGHT) { String s = new SimpleDateFormat("MM/dd HH:mm:ss").format(new Date()) + " " + String.format("%.2f", event.values[0]); tv.setText(s); body = s + "\n" + body; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package com.example.sokamura.myapplication; import android.os.AsyncTask; import java.io.StringWriter; import java.io.PrintWriter; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; class SubClass extends AsyncTask<String,Integer,String> { //マニフェストにパーミッション追加 public SubClass(MainActivity param){} @Override protected void onPostExecute(String param){} @Override protected String doInBackground (String ... params) { HttpURLConnection con = null; try { URL url = new URL("http://xxx.com/xxx.php"); con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("POST"); con.setDoOutput(true); con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream()); out.write("key=xxx" + "&lux=" + URLEncoder.encode(params[0],"UTF-8")); out.close(); con.getInputStream(); return ""; } catch (Exception e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); pw.flush(); return ""; } finally { if (con != null) con.disconnect(); } } } |