Habrコミュニティ全体にこんにちは!
確かに多くの人が「帰宅」<->「仕事」の途中で、Androidのバックグラウンドで音楽を聴いています。 また、10〜20分間、元気いっぱいの休憩時間に地下鉄をいっぱいにすることもよくあります。 運営拠点の場所への次の旅行で、すでに「昼食で百歳」であるトラックを楽しんで、夜に音楽ライブラリを更新したいという私の頭の中のメモを作りました。 もちろん、メモは営業日の旋風の中では安全に忘れられていました。翌朝、私は再びハッキングされたレコードで運転しました。 私はそれを少し考えて、自動化ビジネスへの私の重大な影響を排除するために、このプロセスを自動化する必要があると決めました。
関心のある市民-猫の下で歓迎。
戦略の選択は旅行中に決定されました。Atomの小さな「黒いco」サーバー(Ubuntuを搭載)のメリットは私の自由でした。 解決策は次のとおりです:悪魔の少女がサーバーでインターネットラジオのストリームをストリーミングし、ヘビのスクリプトが他のすべてを実行します:フォルダーをフォルダーに分類し、プレイリストを作成し、何らかの形ですべての良さをスマートフォンにマージします(できれば夜)。
一般概念の後、計画の特定の実装の選択がありました。 それでは、順番に始めましょう:
注意! すべての会話が記録されます。
放送ストリームを記録します。 「侵略者」として、私は小さなコンソールユーティリティ
streamripperを選びました。 できること、必要なことすべて、さらにそれ以上。 ストリームのアドレスと、さらにいくつかの設定(トラックの保存場所と呼び出し方法)を彼女に与えるだけで十分です。
Pythonを使用する
私は自分の活動の性質上、ITインフラストラクチャに直接接続していません。 標準的なアクションの場合、スクリプトやハンドラーを作成する方が簡単な場合があり、落ち着いた良心でルーチンに費やすのではなく、主な仕事をします。 私はそれを我慢できません、突然、あなたが100個のアイテムをチェックし、供給者から納期を見つける必要があると判明したとき。 同時に、販売に心から関心を持ち、関心のあるベンダーであるベンダーは、21世紀には絶対に参入せず、サイト上のフォームの1つの位置に1つのフィールドを残します。 大量のクエリ処理とデータベースの同期? いいえ、彼らは聞きませんでした)これにより、1時間座って「コピーアンドペースト」を行うよりも、Apacheを取り上げてこの不名誉にカールを設定する方が簡単です。 何が良いかを見積もって、私は知識の荷物からpythonを選びました。 スケルトン全体がこれに基づいており、データ同期システムが構築されます。
Samba、FTP、またはSSHfs
次-情報をスマートフォンに転送する方法は? 一般的に、Android自体はnixのメガネット*であるため、転送インターフェースの選択に問題はないはずです。 Googleマーケットをすぐに確認したところ、Androidaのサーバー部分として必要なものがすべて見つかりました。 Samba、SSHfs、および標準FTPが利用可能であることが判明しました。 サーバーからandroidにテストを数回ダウンロードした後、2〜3 GBのトラックがFTPで停止しましたが、もちろんSSHfsで作業する方が快適でした。 しかし、それは不運です-私のスマート(Android HTC HD2と交換)が負荷に対処できなかったか、キー転送が不正に実装されたか、または何か他のものでしたが、実際、Sambaとsshの両方に堆積物がありました。 時々、特に大容量(0.7-1Gb以上)で記録の中断が発生したり、キーが失われたり、sshfsユーザーのアクセス権が誤って発行されたりしました。 一般に、安定したFTPを考えると、これが開発者のバグであろうと私の手であろうと、私は明らかに病気になり、最後の瞬間が残りました。 FTPサーバーは、サーバーからのコマンドまたは独自のスケジューラーによって電話で起動することになっています。 いずれにしても、Androidでコンソールを処理し、intent.actionをアプリケーションに渡してサーバーを起動する必要がありました。 そして、ここで失望は私を待っていました-クライアントのどれも(おそらく私は見栄えが悪いのですか?)AndroidManifest.xmlの説明に類似したものはありませんでした。 つまり アプリケーション自体の起動は可能でしたが、サーバーの起動-もはや。 幸運なことに、素晴らしい
FTPServerアプリケーションの機能で、「選択したwi-fiネットワークに接続するときにFTPサーバーを起動する」などの機能に気づいたのです。 現在、この問題は解決されています。
Android
そして最後の質問。 これは、Androidオペレーティングシステム自体のデバイス、つまり消費電力が大きいことにより関連しています。 FTPサーバー自体は常にwi-fiとディスプレイを保持し、デバイスがこの方法でスリープ状態になるのを防ぎます。そうしないと、Androidがネットワークを切断し、FTPサーバーが利用できなくなります。 したがって、タスクは次のように要約されます:有料の場合、夜間および自宅のWi-Fiの範囲内にいるときにFTPを起動します。 Habréで
Taskerプログラムについて読んだことがある記事を思い出しました。これは、さまざまな条件に応じて簡単なスクリプトの作成と電話機能の切り替えをサポートしていました。 プログラムはすぐにダウンロード、調査、テストされました。 結果は満足のいくものです。
まとめ
その結果、一般的に、バンドルは次のように動作しました。夜間(スマートフォンでスクリプトがサーバーで開始される数分前)にスマートフォンの側面から充電が行われ、ホームネットワークにアクセスできるようになると、FTPServerが起動し、ネットワーク上に2時間あり、その後電話が再起動しましたファイルライブラリを更新し、プレイリストを利用できるようにします。 Ubuntuサーバー側では、streamripperaを使用してストリームが記録され、クラウンを使用して、夜に以下を実行するスクリプトも起動されました。
- チェック済み:streamripperが実行されており、プロセスにそのコピーがある場合。 これが見つからなかった場合、スクリプトはstreamripperaの個別の子プロセスを編成しました。
- ダウンロードしたトラックを「ラジオ名-DD.MM.YYYY」の形式でフォルダにソートしました
- mp3ファイルが作成された時間に応じて、同じフォルダーにプレイリスト* .m3uを作成しました。 つまり 実際、ラジオで鳴った順番で。
- スペースを節約するために、サーバー上の古いレコードを削除しました(制限はスクリプトで指定されています)
- Androidで古いエントリを削除しました(制限はスクリプトで指定されています)
- Androidに新しいものを追加しました(制限はスクリプトで指定されています)
このような小さなホームオートメーションは数週間私と一緒に暮らしており、これまで重大なバグはありませんでした。 朝起きてヘッドフォンをつけて、たくさんの新しい音楽があり、レコーディングを転送するプロセス全体が私としてバックグラウンドで行われていることを嬉しく思います。
実際、この小さな話は音楽に関するものではなく、日常生活ではなく創造性のための時間を残して、生活をより便利にするために現代の開発が私たちに与える機会についてのものです。
使用された「材料」:
- Android FTPServer用のFTPサーバー
- Android Tasker用の高度なタスクスケジューラ
- Python
- Ubuntu Server 12.04オペレーティングシステム
- Androidオペレーティングシステムを搭載したHTC HD2携帯電話
PS
いくつかの推奨事項とコメント:
- ルーターでは、常に1つのFTPサーバーIPアドレスのみを発行するために、スマートフォンのMACアドレスにバインドすることをお勧めします
- 電話機のフラッシュカードの空き容量を定期的に確認します
- 平均して、1日のストリーム(128 kbit / sで)は0.8-1.2 GBかかります
- 空気を介したサーバーからスマートフォンへの転送速度は約2.5-3Mb / s
以下に、スクリプトのテキストを示します。一般的には非常に多くの説明がありますが、「オンザフライ」で明確になるはずです。