こんにちは、Habr!
夏が来て、多くの人が街を去ります。 休暇中の誰かと、夏全体の誰か(仕事が許せば)。 しかし、この国の主な問題の1つは(すべての人々にとって、何らかの方法でITに接続されている)、通常の有線高速インターネットの欠如です。 しかし、これはLTEネットワークの存在のおかげで部分的に解決されています。
私の地域では、MegaphoneとYotaという2つの主要なLTEプロバイダーしかありません。 メガホンは大幅に安価ですが、1つの非常に不快な機能があります。最大レートであっても、1か月あたり20GBのトラフィック制限です。
したがって、オペレーターの選択は、私の意見では明らかです。 それでも、20メガビットの支払いは自宅での100倍の2倍です。これは疑わしい喜びです。 しかし、同時に、他のオペレーターとは異なり、Yotaはいつでも支払い済みの時間を再計算して、アカウントの現在の料金を無料で変更することができます。 速度が必要-スライダーを最大限に緩めます。 いや? その後、あなたは遅くなり、より少なく支払うことができます。 さて、どうすればこのプロセスを自動化せずに保持できますか?
ハブには、iotovods-automatorsの試みを説明する記事(
one 、
two )が既にありました。 しかし、いくつかの機能のために、それらの作品は私に合わず、私は自分の大きく異なるバイクを書かなければなりませんでした;しかし、いくつかの機能のために、それらの作品は私に合わず、私は自分の大きく異なるバイクを書かなければなりませんでした。
そして、おそらく、他の人の自転車が私に合わなかった理由の分析から始めるでしょう。 特に焦りがちな人/経済的に興味がある人は、すぐに実装を説明するセクションに進むことができます。
問題の声明
linx56 オプションは
、 phantomjsで動作するため、まったくうまくいきませんでした。これは、かなり優れたハードウェアを必要とします(Raspberry PIはそうではありません)。 はい、メインコンピューターに置いて24時間稼働させ、インターネットをオフにする必要があるcronスケジュールを記録して
も 、インターネットは予想外に使用されるため、とにかく
節約よりも多くの電気料金が発生します。 (そして私だけでなく、家族も、主な目的は「ただ働く」ことです)。
bambrman の2番目のオプションは 、
phantomjsの代わりに貪欲なカールを使用するという点で、最初の
オプションより
も大幅に優れています。 しかし、残りは同じです。
その結果、スケジュール(または人間の手)ではなく、ローカルネットワーク上のすべてのデバイスが消費する現在の速度に基づいて、別の自転車を作成することが決定されました。
実装
Raspberry Piと、n秒ごとにメインホームルーター(OpenWrtを搭載したTP-LINK WDR4300)にSSH経由で接続するPythonスクリプトを使用し、ifconfigを使用して、必要なインターフェイスの統計を圧縮します。
その後、彼は前回と前回の測定の間隔の平均速度を考慮し、それをモジュールに送信します。モジュールは現在の速度と構成設定に従って関税を切り替える役割を果たします。 より明確にするために、以下にその一部を示します。
modes: { 0: 320, 290: 512, 495: 768, 700: 1.0, 900: 2.1, 1900: 3.1, 2900: 4.1, 3900: 6.5, 6500: 8.0, 8000: 10.0, 10000: 15.0, 14800: 20.0 }
ご覧のとおり、キロビット単位の速度が辞書キーとして使用され、イオタレートが値として使用されます。
現在の速度を測定した結果によると、たとえば1530キロビットになりました。 設定内の最も近いキーの値に切り捨てて900を取得します。したがって、2.1メガビットの速度の関税を使用する必要があります。 この関税がすでに有効な場合、何も起こりません。 ただし、関税を引き上げる必要がある場合は、1つの機能があります。
問題は、インターネットが長期間使用されておらず(かつ320 kbpsの関税が有効化されている)、誰かが突然YouTubeをオンにした場合、320 kbpsから3.1 mbpsへの順次切り替えに時間がかかる可能性があることです(永遠に遅れをとるLC Yotaに言及するため)。 一方、誰かが数ページと数枚の写真をアップロードすることを決めたときに毎回最大レートでジャンプすることも悪い考えです。 一般に、設定に追加するよりも良いものは思いつきませんでした
speed_increase_step: 1
このパラメーターは、関税間のアップグレードのステップサイズを示します。 つまり、speed_increase_step = 5を設定すると、320 kbpsから3.1メガビットへのアップグレードがすぐに発生し、その後15.0および20.0になります。 そして、可能な速度が完全に利用されない場合、これはダウングレードメカニズムによって補償されます。
ダウングレード
アクティブなタリフが長い間最大限に活用されていない場合(現在の速度が現在のタリフに必要なしきい値を超えていない場合)、スクリプトはn分待機し、ローカルネットワークの現在の要求を満たす(平均速度に基づいて)タリフに切り替えます。 この分数は、hold_high_speed_timeパラメーターで分単位で設定されます。
hold_high_speed_time: 3
実際、主な機能はここで終わります。 確かに、誰かに興味があるかもしれない何かがあります:
PushBulletを介した関税変更通知
それは他のすべてと同様に、主に私のために書かれました。 しかし、率直に言って、それはあまりにも多くのスパムを生成するため、役に立ちませんでした。 しかし、多分誰かがそれを好きになるでしょう;)
このことは、設定の同じ場所ですべてオンになります:
pb_enabled: true pb_api: v13WA7HYfwj99gUz8rwvK2m7eLN1uheVxZujAgP8gn2su pb_devices: [ ujAgP8gn2sasFDsgsWhxs, ujAgP8gn2mkasnuH2Gtga ]
ご覧のとおり、ここではすべてが非常に簡単です。 pb_enabledはtrue / falseです。 目的は明らかです。
pb_api-www.pushbullet.com/accountのキー
pb_devices-通知の送信先デバイスの識別子のリスト。
api.pushbullet.com/v2/devicesから入手できます。 入り口でログインするように求められます。ログインフィールドにAPIキーを入力するだけです。 メソッドの詳細な説明はこちら:
docs.pushbullet.com/v2/devicesじゃあ
完了、メッセージが配信されました。 これで
、コードを
表示し 、全体を準備する方法を伝えることができます。
設置
- まず、ルーターにOpenWrtをインストールします。 まあ、またはSSH、キー認証、ifconfigユーティリティを使用してそのような何か。
- その後、Raspberry Piのようなものを見つける必要があります。 これは、3番目のpythonを実行できる場所であり、キー認証を持つsshクライアントがあります。
- ルーターに接続するためのキー認証を構成します。 フォームのコマンド(もちろん、データを含む) "ssh 192.168.1.1 -p 22 -l root ifconfig"が追加の質問なしで機能することを確認します。
- Python 3とpipを配置します。 最初は、すべてが3.2.3で作成およびテストされました。 以前のバージョンのテストとの互換性のために
- GitHubからプロジェクトリポジトリのクローンを作成します: https : //github.com/wutiarn/yota-speed-controller
- リポジトリフォルダーにcdを作成します
- pip3 install -r requirements.txtを実行します。 pipの名前は異なる場合があることに注意してください(たとえば、pip-3.2)
- config.yamlの編集。 ほとんどのパラメータの説明は上部にあります。 残りは、私には、紹介を必要としないようです。 まあ、インターフェイスを除いて。 デフォルトでは、eth0.2がリストされています。 通常、openwrtでは、eth0.2がwanインターフェイスですが、確認することをお勧めします。 また、注目に値するのはuse_sshオプションです。 falseに設定した場合、ローカルインターフェイスが監視されるのは完全に論理的です。 まあ、これは誰かがルーターとして本格的なコンピューターを使用する場合です。 さて、または誰かがルーター上ですべてを実行します
- その後、main.pyを実行します。 直接(実行する権利を与えた後)、またはPythonをインタープリターに渡すことができます。
- すべてが機能する場合は、スーパーバイザをインストールします(通常は標準リポジトリに)
- その途中でmain.pyへのパスと、必要に応じてログが書き込まれるファイルを修正することにより、yota.confファイルを/etc/supervisor/conf.d/フォルダーに移動します
- そして、supervisorctl reloadコマンドでスーパーバイザーを再起動します。 デーモンは自動的に起動するはずです。 最後のログを見てください。 次のようなものが必要です。
2014-07-06 14:16:01,805 [INFO] yota | Initializing 2014-07-06 14:16:11,497 [INFO] yota.web | CURRENT TARIFF: 512 2014-07-06 14:16:11,712 [INFO] yota | Initialised 2014-07-06 14:16:11,718 [INFO] yota | Starting 2014-07-06 14:16:16,016 [DEBUG] yota.current_speed_provider | Current speed: RX: 5 TX: 9. Summary: 14, Time: 3 2014-07-06 14:16:17,262 [INFO] yota.speed_control | Downgrade started: 2014-07-06 14:19:16.022307 2014-07-06 14:16:18,315 [DEBUG] yota.current_speed_provider | Current speed: RX: 7 TX: 19. Summary: 26, Time: 2 2014-07-06 14:16:20,575 [DEBUG] yota.current_speed_provider | Current speed: RX: 12 TX: 20. Summary: 32, Time: 2
実際、それがすべてです。 これはヨータの寛大さのいくらかの乱用であることを理解しています(関税を考慮しても、寛大さですか?)、それにもかかわらず、誰も何も変えないことを望みます。 最終的に、自分でこれを展開できる人は多くありません。 そして、あなたが彼らの少数がヨータを使用していると考えるならば、それは一般にささいなことです。