Ubuntu20.04 Docker 設定メモ Heroku

 

インストール後、SoftwareUpdaterが走る。とても手間がかかるようです。

ubuntu20.04.4新規インストール virtualbox インストールメモ、セットアップ

しかし、今までがUbuntu16だったので、いちいち無駄な手間がかかっていたのが解消されれば良いなと。

 

Dockerで環境を構築することにするので、その手順。

参考

コマンドを順番に実行するだけだと思います。

 

Heroku環境を作る。参考

git clone

いや、下の3つ入らなかったような??

docker pull php:7.4-fpm-alpine
docker pull nginx:1.19-alpine
docker pull postgres:12

git clone https://github.com/nagi125/laravel-docker-template

cd laravel-docker-template/

docker-compose up

apt install docker-compose

docker-compose up

何かエラーが出ているような・・・・

2022-04-03 続き

 

docker-compose up

で起動完了。

laravelインストール

docker-compose exec app composer create-project –prefer-dist laravel/laravel blog “6.*”

docker-compose exec app cp -R ./blog/. ./

http://localhost

にアクセスできるけどエラーが出る。

file_put_contents(/app/storage/framework/sessions/P3K1Aj8hOoLxXi7AMqZD1Y7oPc8moikg4urhQuhM): failed to open stream: Permission denied

対策 参考

chmod 777 storage/logs

chmod 777 storage/framework/sessions/

chmod 777 storage/framework/views/

http://localhost/

でトップページが表示された。

vi .heroku/nginx/nginx.conf

vi Procfile

heroku-cli インストール 公式参考

sudo snap install –classic heroku

結構手間がかかっています。

heroku login

自動でブラウザは起動しなかった。まあ手動でログイン。

heroku buildpacks:add heroku/php -a your-app-name

heroku buildpacks:add heroku/nodejs -a your-app-name

 

git push heroku main
fatal: ‘heroku’ does not appear to be a git repository
fatal: Could not read from remote repository.

gitのリポジトリが無い。

gitインストールして無かったから。 参考

sudo apt update && sudo apt install git

git –version

git version 2.25.1

git push heroku main

fatal: ‘heroku’ does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

対策、参考

git remote add heroku https://git.heroku.com/アプリケーション名.git

 

git push heroku main

! [rejected] main -> main (fetch first)
error: failed to push some refs to ‘https://git.heroku.com/アプリ名.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.

 

対策、参考

 

git commit

*** Please tell me who you are.

対策、参考

$git config –global user.email ここに自分のアドレス
$git config –global user.name ここに自分の名前

git commit

何かまだエラーがあるような

 

そもそも、gitコマンドに慣れてないので。参考

git push heroku main

 

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.

なるほど既に前のやつとの整合性が取れない。参考

git pull heroku main

なるほど。アプリケーションを新しく作った方が良いな。リモートの。

 

http://localhost/

でエラーになってしまった。pullしたせいだなこれは。

 

要はやり直した方が良い。

削除。docker rm などで。参考

docker rmi [イメージID]

 

2022-04-05 作り直した後

 

git push heroku main

でまだエラーが出る。



remote:        Script @php artisan package:discover --ansi handling the post-autoload-dump event returned with error code 255
remote:  !     WARNING: A post-autoload-dump script terminated with an error
remote: 
remote:  !     ERROR: Dependency installation failed!
remote:  !     
remote:  !     The 'composer install' process failed with an error. The cause
remote:  !     may be the download or installation of packages, or a pre- or
remote:  !     post-install hook (e.g. a 'post-install-cmd' item in 'scripts')
remote:  !     in your 'composer.json'.
remote:  !     
remote:  !     Typical error cases are out-of-date or missing parts of code,
remote:  !     timeouts when making external connections, or memory limits.
remote:  !     
remote:  !     Check the above error output closely to determine the cause of
remote:  !     the problem, ensure the code you're pushing is functioning
remote:  !     properly, and that all local changes are committed correctly.
remote:  !     
remote:  !     For more information on builds for PHP on Heroku, refer to
remote:  !     https://devcenter.heroku.com/articles/php-support
remote:  !     
remote:  !     REMINDER: the following warnings were emitted during the build;
remote:  !     check the details above, as they may be related to this error:
remote:  !     - A post-autoload-dump script terminated with an error
remote: 
remote:  !     Push rejected, failed to compile PHP app.
remote: 
remote:  !     Push failed
remote:  !
remote:  ! ## Warning - The same version of this code has already been built: 4f6a003432986e9c40d4e65c18566b7000573630
remote:  !
remote:  ! We have detected that you have triggered a build from source code with version 4f6a003432986e9c40d4e65c18566b7000573630
remote:  ! at least twice. One common cause of this behavior is attempting to deploy code from a different branch.
remote:  !
remote:  ! If you are developing on a branch and deploying via git you must run:
remote:  !
remote:  !     git push heroku :main
remote:  !
remote:  ! This article goes into details on the behavior:
remote:  !   https://devcenter.heroku.com/articles/duplicate-build-version
remote: 
remote: Verifying deploy...

 

2022-04-07 結構手間取ったけどphp8にしないといけないのかな

 

————-

ビルドログがなんか違うぞ。

Installing platform packages…
– php (8.1.4)
– apache (2.4.53)
– composer (2.3.3)
– nginx (1.20.2)

参考

どうもこれらしいな。phpのバージョンが8になってるんだ。

laravelはversion8からphp8なのか?
docker-compose exec app composer create-project –prefer-dist laravel/laravel blog “8.*”
docker-compose exec app cp -R ./blog/. ./
docker-compose exec app rm -rf blog

ではphpは8にならなかった。

php8にする。どうやって? 参考

 

.docker/php# vi Dockerfile

#FROM php:7.4-fpm-alpine
FROM php:8.0.5-fpm-alpine

参考

docker rmi a64a6e03b055

とかで消してから再度docker-compose up

 

docker-compose exec app composer create-project –prefer-dist laravel/laravel blog “8.*”

ralavelのversion8をインストール

docker-compose exec app cp -R ./blog/. ./
docker-compose exec app rm -rf blog

git add .

git commit -m “comment”

http://localhost/

でエラーが出る。

Symfony\Component\ErrorHandler\Error\FatalError
Declaration of Symfony\Component\Translation\TranslatorInterface::getLocale() must be compatible with Symfony\Contracts\Translation\LocaleAwareInterface::getLocale(): string

対応参考

“symfony/translation”: “4.3.8”,

 

なんか違う事やってたかもしれない。解決できないな。
composer update

sudo apt-get remove composer;

composer self-update

 

しかし、git push heroku main で、

ビルドはできた。

 

heroku config:set APP_KEY=your-app-key -a your-app-name

が無いからアクセスはできない。

 

 

 

 

switchbot スイッチボット hub mini ハブミニ エアコン制御 温湿度計 換気扇 プラグ

電気代が13500円とか、阿保みたいに高くなったので自動制御システムを導入しようかと。

とはいえ、結構やっつけ、場当たり的なコードで対応しています。

 

スイッチボット ハブミニ

【8/4開始!全品対象クーポン】 【正規販売店】 スマホ 遠隔操作 エアコン リモコン 汎用 スイッチボット ハブ ミニ SwitchBot Hub Mini スマートリモコン 家電 アレクサ 対応 家電 照明 リモコン iphone 操作 スマート家電 Google Home Amazon echo yy

スイッチボット 温湿度計

Switch Bot SwitchBot温湿度計 ホワイト スマート温湿度計|生活用品 生活雑貨・介護 洗面・浴用品 温度計・湿度計 生活用品 生活家電・AV テレビ・オーディオ その他AVアクセリー 生活用品 生活家電・AV 携帯・スマホ用品

スイッチボット プラグミニ

created by Rinker
¥1,950 (2025/05/05 02:06:03時点 楽天市場調べ-詳細)

ーーーーーーーーーーーーー

2024-06-25 GASの認証が不安定なのでLaravelに移行。

しかしLaravelに移行してもエアコンの状態そのものを取得できない。

ーーーー引用ーーーー

SwitchBot ハブミニは赤外線リモコンによる操作なので、エアコン本体からのフィードバックを取ることはできません。

なので、On/Offや冷房・暖房・送風などの状態、温度設定などは、あくまでもハブミニで設定した状態であり、もし赤外線がうまく本体に届かなかったら本体がそのとおり動いていない可能性があります。

ーーーー引用ここまでーーーー

アプリでは状態取得できているように見えるんだけどなぁ。

リアルタイムの状態が取れないとなると、毎回制御情報を送信したほうがいいかも。

制御ログ

ーーーーーーーーーーーーー

2022-12-08(TH)設定追加、流石に家にいない間はエアコンを切ろうかと。

 

電気代の調査もしていた結果、無駄に動いて電力を消費しているようなので。

節電ポイント 電気代調査 やたら高いと思うので調査

warm_on_temp_out_gps
5

をパラメーターで追加。

とうことで、GPSで外出中の時は5度を下回らない限りエアコンはオフになる

メッセージはこんな感じにしました。

[“OFF,low,vent”,”{\”para\”:\”0,0,2,off\”,\”st\”:\”success\”,\”msg\”:\”冬用判定(stop_cool_dry_temp)25より低い 。ventのみ,温度=18,湿度=47\”}”,{“statusCode”:100,”body”:{},”message”:”success”}]

あと、Gasの権限がたまに切れて再設定する羽目になる現象は解決していないので、エアコン制御通知をメールするようにします。



//パラメーターをセット、メールアドレス
var prop = PropertiesService.getScriptProperties().getProperties();
var notice_mail_address = prop.notice_mail_address;


function notice_mail(paraRange,jtext){
  if(paraRange == "A4:B4"){
    let recipient = notice_mail_address; // 宛先メールアドレス
    let subject = "エアコン制御変更"; // 件名
    let body = jtext; // 本文
    let options ={
  //    cc: "cc@gmail.com", // ccアドレス
  //    bcc:"bcc@gmail.com", // bccアドレス
      noReply:true // 返信不要
    };
   //送信
    GmailApp.sendEmail(recipient, subject, body, options);
  }
}



 

 

 

2022-10-10(MO)設定変更。夏冬で体感温度が恐らく違うので。

 

stop_cool_dry_temp

28

warm_on_temp
22

取りあえず冬はもしかして26℃とかにするだろう。けど冷房が動いては困る。

あと、GBP制御をすることにする。外にいるときは換気扇を回していいが、家にいるときには回さないで欲しいかな。

と言う設定をして様子を見ることにします。

 

2022-10-08(SA)最近急に寒めなので暖房制御を追加しようかと。

現状取りあえず、パラーメータを以下で対応。要は何にもやってないマニュアルのみ。

Script_ON_OFF_flg
OFF

以下2つをパラメーターに追加

stop_cool_dry_temp
warm_on_temp

 

よって現状のパラメーターはこんな感じになっています。

GPS TIME_BASE Script_ON_OFF_flg GPS_chg_time min_chg_time_span LowestTemp MaxTemp MaxHumi TargetTemp TargetHumi RangeTemp RangeHumi VentControl weather_Station_get_URL stop_cool_dry_temp warm_on_temp
OUT 使ってない OFF 2022-10-08 14:56:00 15 10 37 85 27 65 2 3 1 https://api.cultivationdata.net/amds?point=46106 22 17


//冷房、除湿OFF、暖房ONの設定追加
  if(parseInt(globalpara['stop_cool_dry_temp']) > parseInt(meterJson['body']['temperature'])){
    calc_Para['calc_Command']='OFF,low,vent';
    calc_Para['calc_Message']='冷房除湿判定温度'+globalpara['stop_cool_dry_temp']+"%より低い停止";
  }
  if(parseInt(globalpara['warm_on_temp']) > parseInt(meterJson['body']['temperature'])){
    calc_Para['calc_Command']='HEAT,low';
    calc_Para['calc_Message']='暖房判定温度'+globalpara['stop_cool_dry_temp']+"%より低いので暖房運転開始";
  }

 

こんなのを追加しただけで行けるかなと。

 

2022-09-29(TH)やはりGasの権限でエラーが出る。たまに。

 

何故だろう。原因不明だけどとりあえずPOSTのリターンコードでメッセージを出すことにします。

多分これで良いのかな?

リターンコード200以外はメッセージで通知するようにしただけです。

Macrodroid

スプレッドシートにログとして出力しています。


function doPost(e) {
  var params = JSON.parse(e.postData.getDataAsString());
  var funcName = params.funcName;
  var funcVal = params.funcVal;  
  if(funcName == "GPS"){
    if(globalpara["GPS"] != funcVal){
      globalpara["GPS"] = funcVal;
      //更新間隔判定
      const d5 = dayjs.dayjs(new Date());
      const d6 = dayjs.dayjs(globalpara['GPS_chg_time']);
      const span_Time = d6.add(globalpara['min_chg_time_span'],'m');
      if(d5 > span_Time){
        //更新時間アップデート
        globalpara["GPS_chg_time"] = d5.format('YYYY-MM-DD HH:mm:ss');
        //書き出し
        console.log("cols="+cols);
        const setPara = [Object.keys(globalpara),Object.values(globalpara)];
       sheet.getRange(1,1,2,cols).setValues(setPara);
        //ログ記録
        log(params,"A4:B4");
      }else{
        log(params,"E4:F4");
      }
    }else{
      log(params,"E4:F4");
    }
  }
}


function log(params,paraRange) {
    ////////ログ行数管理
    const rows = sheet.getMaxRows();
    if(rows < 200){
      sheet.insertRowsAfter(100, 100)
      console.log(rows);
    }
    sheet.deleteRows(70,10);
    //最新ログ行追加
    const range = sheet.getRange(paraRange);
    range.insertCells(SpreadsheetApp.Dimension.ROWS);
  var date = new Date();
  date = Utilities.formatDate(date, "Asia/Tokyo", "yyyy/MM/dd H:mm:ss");
  var jtext = JSON.stringify([ params.funcName,params.funcVal,params.funcVal2 ]);
  const values = [
    [ date, jtext ],
  ];
  range.setValues(values);
}

 

 

 

2022-09-05(MO) スクリプト停止、エアコン稼働していない。

再び「認証が必要です」と出ています。一度許可した権限が一定時間で消えてしまう。これで二回目です。

確認しましたが、こちらの設定をオンの状態でした。

 

勿論権限を再承認しましたが、様子を見ている状態です。

上記のURLをよく読んでみると「オン」にした状態で認証すれば出なくなる。のかもしれないです。

とにかく様子見です。

 

2022-08-29(MO) マニュアルでスクリプトを実行しないように対応

Script_ON_OFF_flg
OFF

の項目を有効か。とりあえず。

これがOFFの時はスクリプトを実行しないようにしました。

要は今日あたりは結構涼しかったので、エアコンいらない。けど、除湿だけは稼働していたからです。湿度は高かった。

じかし、実際には寒すぎるくらいまで除湿してくれていたし、そもそも窓を開けていても快適なくらいでした。

よって、もしかして外気の状況によっては止める制御も入れた方が良いのかもしないと思っている所です。

まあ、理想的には野外に温湿度計を設置して室内との差を見ると良いのかもしれないですね。

こちらからアメダスのデータを取得してみます。

最新版はこちらになるのかも

私の所からは相模原中央の観測所が近い気がします。こちらによると

となると amdno=46046 という事になるのかと。

取得できないな。観測所によってはダメ見たい。

辻堂 こちらはOKっぽい

相模原中央
ほぼ日付しか取れていない。

海老名
温度は取れたが湿度がとれていない。

なるほど。この表に載っている情報しか取れないんだ。多分。

湿度がとれる横浜だと随分と私の所からずれてしまう。

けど、とりあえず仕方ないのかと。横浜

weather_Station_get_URL
https://api.cultivationdata.net/amds?point=46106

とか適当にパラメーターを設定して外気が設定温度より低い場合は単に換気のみとしました。

取り合えアズまたこれで様子を見ようかと。というか、暖房の事を全く今のところ考えていないな。

 

2022-08-29(MO) GASの権限が無くなるエラーに対応

なぜか一度許可した実行権限が無くなって自動実行されない状態でした。

こちらと同じかもしれないです。

こちらの設定をオンにしたので、これで様子見します。

まあ確かにこれはデフォルトでオフだろうなと思われる設定な気もします。勝手に私の実行権限でアプリケーションを変更られてはたまらない。

信頼できるディベロッパーにしか許可できないでしょう。

まあ、一応アカウント自体を分けて作っているわけですが。

取りあえずオンにしたので、この状態で様子見します。

 

2022-08-25(TH)プログラム修正、RangeTemp、RangeHumi を許容範囲に

設定温度に対して判定だとあまりに頻繁にエアコン制御が発生しているようなので、Range範囲内なら弱運転に変更しました。

また、除湿よりも冷房優先にしました。
除湿だと温度が下がりすぎてしまうようでして。

そもそも冷房かければ除湿もされるし。

あと、換気扇の制御は部屋にいない時は自動的に換気で良いのだけど、いるときに換気されると、勝手に温度、湿度共に上がって、無駄にエアコンのオンオフ制御が発生しています。

取りあえず、部屋にいるときは換気扇をONにしないことにしました。

とはいえ、外気の状況によってはオンにした方が良いときもあるでしょうから、もしかして気象庁のデータからPullして判定するかもしれません。

あと、get_aircon_status() とか、デバイスID指定して試してみましたが、エアコンのステータスは取れないようでした。そりゃあそうかなと。エアコン側からリモコンに情報発信していないでしょうから。

よって、ログから起動状態を推測するしかないかと。

あと、トークンとかでバイスのベタ打ちをやめます。そりゃあそうか。参考

なるほど。結局新エディタではスクリプトに書くことになっているような。参考

こちらをほぼ丸コピーして動くようにしました。

なんか微妙な感じもするけど、編集権限を厳密に管理することでセキュリティを担保することにします。

あと、何故かシートIDとTabIDあたりはベタ打ちでないとうまくうごかなかったような?

とりあえずこれで様子を見ます。

 

2022-08-18(TH)追加設定、HTTPshotcutをバッテリーセイバーから除外

 

MacrodroidからキックされているようだがPostが届いていない。ログを見ると。

 

よって、HttpShortcutsをバッテリー制御から除外してみました。

が、どうもそれでも届いていない気がします。

HttpShortsの設定でフォアグラウンドでリクエストを実行を許可しました。

アプリ外部からショートカットが機能しない場合に有効にとあるので。

それとは別に、ステータスsuccessの判定を削除。マニュアルでオンオフしたときにはステータスとか記録されていないので対応。

しかし、それでもPostされていない。Macrodroidのログは動いているのでHttpShotcutsが動いていないと思われます。

画面がアクティブの時は正常動作しました。つまりHttpShotcutsが画面上にいちいち出てこないといけない状態なんだろう。

バックグラウンドで実行時ポップアップの表示を許可。いや許可しない事にしました。でも動かない。

しょうがない・・・termuxでいくか 参考

 

#!/bin/bash
wget –header=’content-type: application/json’ –post-data ‘{JSONデータ}’ URI

リポジトリが使えない?参考

 

Termuxインストール参考

GooglePlay上のアプリはサポート切れしている模様。

F-DROID

 

こちらからは正常動作するようです。

Mirrors by Grimler をつかっています。リポジトリ

pkg install wget git curl proot yarn vim

 

と思ったらMacrodroidのHTTPリクエストにPOSTがあるじゃないか。

HTTP リクエストのアプリの事か?若干不明だが、見落としていただけかもしれない。

取りあえず、出来たっぽい

ただ、画面オフ状態から実行されるのかのチェックは必要だ。

 

ーーーーーーーーーーーーー

2022-08-15(MON)スクリプト作成中メモ

doPostのログが出なかったのでこちらを参考にGCPプロジェクトと紐づけ。

結果的にログは出たのだが、デプロイが反映されていないのに気づくのに結構嵌った。

要はデプロイを管理で画面で、「新バージョン」を選びなおさないとならなかった。

あと、今のIFTTT設定だとエリアに出入りしたときにスマホがビジーだと変更されないようでした。

よって、とりあえずMacrodoridとHttpShortcutsのショートカットで時間で判定しています。

Taskerプラグインでは動かなかったので仕方ないですが、どうもスマートじゃないので後に変更するかもしれないです。

あと、換気扇制御用のプラグを注文しました。

created by Rinker
¥1,950 (2025/05/05 02:06:03時点 楽天市場調べ-詳細)

 

2022-08-04(TH) エアコンをもう少し細かく制御できるようにしようかと

こちらを参考にスイッチボットのスクリプトをGASで作ろうと思います。

殆ど丸コピーで対応できたのだけど、一か所修正しないとリモコン(赤外線リモコン)のデバイスが表示できなかった。

修正箇所


//console.log(json['body']['deviceList'])//ログから取得したいdeviceIdを選んでください
console.log(json['body'])//ログから取得したいdeviceIdを選んでください

 

function switchBot

でエアコンを起動できることを確認しました。

よって次はエアコンの設定を変えて起動します。参考

オフィシャル

以下で25℃の除湿で起動を確認。

“command”: “setAll”,
“parameter”: “25,3,1,on”,
“commandType”: ‘command’

次は温湿度計の値を取得します。参考

GET https://api.switch-bot.com/v1.0/devices/XXXXXXXXXXXXXXX/status

こちらを利用して取得してみます。

普通に取得できました。

humidity: 63,
temperature: 29.4

GPSと連動させたいので、IFTTTとGASの連携を調査します。参考