古いNokiaとAndroidの携帯電話からSMSを送信した方法

画像



約1年前、私たちはモスクワの地下鉄の故障について警告する小さなプロジェクトを立ち上げました



その主な問題は、SMSの送信でした。 私たちはこのプロジェクトが快適であるとは期待していなかったため、1500件以上の登録があります。 最良の場合、私たちは300人を数えました。これで私たちはうれしい驚きを覚えました。



SMSの問題は、主に価格が原因でした。 1回の郵送で約3000ルーブルが判明しました。 1 SMSの価格が1.5ルーブルであるという事実を考えると。 3日ごとの列車の動きに不具合があるときがありました。 1か月あたり10の内訳。 3000 * 10 = 30000ルーブル。 資金提供されていないプロジェクトには少し高い。



その後、車輪の再発明を始めました。 つまり、真に無制限のSMSで関税を探します。 最後に、彼を見つけました。 月に約600ルーブルかかります。 次に、SMSを送信する問題を解決する必要がありました。 そして、古き時代の記憶としてクローゼットの中にほこりを集めていた古代のノキア6610iの時が来ました。 しかし、タスクを送信するために、uartを介してラップトップに接続するなど、少し変更する必要がありました。



画像 スキーム



ここでは、電圧を5Vから〜3.4Vにリセットするためにダイオードのペアが必要です。 ダイオードの降下により、1Aの電流で合計1.6Vになります。 このような電流は、Nokiaがネットワークでアクティブに動作している場合にのみ消費され、ほとんどの場合、ドロップは約1.5Vになります。

トランスミッターが動作しているときに携帯電話の消費をスムーズにするために、大きくて厚いコンデンサが必要です。

抵抗器-サーミスタとバッテリー識別ピン(BSI)を交換します。これにより、ノキアはバッテリーが接続されていることを認識します。

適切な抵抗定格が見つからなかったため、それを元に収集しました。



画像



gnokiiプログラムは送信に使用されましたが、その名前から、そのような目的のためだけに作成されたことが非常に明白です。



6610iからの構成:



[global] port = /dev/ttyUSB0 connection = dlr3p model = 6510
      
      







送信するコマンド

 echo 'text' | gnokii --sendsms number
      
      







rootだけでなく送信できるようにするには、適切な権限を/ dev / ttyUSB0に設定する必要があります



それから、彼らが私たちに答えてくれるのが好きで、彼らは私たちに答えました。 しかし、問題はここで終わりませんでした。つまり、速度です。このような配布には4時間かかりました。 したがって、この方法で、たとえば修理のためにラインの一部を閉じるなど、長期間に関連する情報を送信しました。 1枚のSIMカードで約3,000通のメッセージを処理できました。 2、3のニュースレター。 彼らはさらに私たちをブロックしました。 私たちはTPに電話し、封鎖の理由を尋ねました。彼らは私たちに答えました-ニュースレター。 かつて、5回の郵送用の1枚のSIMカードで十分でしたが、タイムアウトが増えてテキストが変更されました。 そして、私たちはいつも美しい部屋に幸運でした-些細なことですが、素敵です。



通常の場合、最大40分の情報があるため、メールの送信は数分で完了することが理想的です。 そのため、ニュースレターをAndroidスマートフォンで行うことにしました。 このソリューションの主な利点は速度でしたが、理想からはほど遠いものでした。 1 SMSは1.5秒で送信され、約37分かかりました。 さらに、別の電話を接続することで並列化して、希望の速度を達成することができました。 しかし、ここでは、最初の郵送の途中または2回目の郵送の開始時にブロックされたオペレーターに絞殺されました。



アプリケーションロジックは、サーバーから定期的にジョブを受け取ることでした。 数分ごとに、アプリケーションはjson形式のコマンドをサーバーに求めました。json形式は、電話番号の配列とSMSテキストで構成されていました。



タイムアウト付きのコマンドを取得するスレッド、SMSを送信するスレッド、ロード後に起動するBrodasReceiverがありました。 しかし、処方箋のためにプロジェクトは失われたため、完全なコードはありません。 SMSテキストを最大1 SMS-70文字(これはキリル文字用)にカットしました。これはサーバー側で行われましたが、念のため、SMSの送信は正確に70文字でした:



 SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage("NUM", null, "TXT", null, null);
      
      







SMSをマニフェストに送信する権利を忘れない



 <uses-permission android:name="android.permission.SEND_SMS" />
      
      







電源を入れた後の起動の場合、権利を忘れないでください。



 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
      
      







マニフェストに登録するには:



 <receiver android:name=".Boot" android:enabled="true" android:exported="false" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
      
      







ブートコード:



 public class Boot extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {    } }
      
      









バッテリー切れやその他の同様の状況の場合の自動起動、突然電源を入れた後、アプリケーションを起動するのを忘れます。 とにかくこのアプリケーションだけがこの携帯電話に住んでいるので、バッテリーに関連するいくつかの浪費を恐れていません。



さて、アクティビティにフロー開始を追加します。



また、アプリケーションがインターネットにアクセスできるようにします。



<uses-permission android:name = "android.permission.INTERNET" />



もう1つの重要な点は、ディスプレイをオフにしてもアプリケーションが機能するためには、PowerManagerを呼び出す必要があるということです。 そうでない場合、システムは電力を節約するためにアプリケーションを自由に安楽死させ、要求は不規則に実行されます。



これを行うには、アクセス許可を追加します。



 <uses-permission android:name="android.permission.WAKE_LOCK" />
      
      







アクティビティにコードを追加します。

 PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP| PowerManager.FULL_WAKE_LOCK| PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "");
      
      







そしてストリームに

 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); wl.acquire();   ,   json wl.release();
      
      







また、SIMカードを絶えず交換することはあまり便利で合理的ではなかったため、この方法も長い間機能しませんでした。値札は急速に成長し、その意味を失いました。



次に、Whatsapp経由で送信しようとしましたが、メッセージは10メッセージごとに、またはさらに高速で死亡しました。 そして、1番号の登録には7ルーブルがかかりました。 私たちは再び、私たちが始めたのと同じ数字で出かけ始めました。



少し前に、電報用のボット-https://telegram.me/msk_metroを作成しました。ここでは、すべてがPushBulletと同じです。これは、ハブでの最初の投稿後にリクエストで接続しました ここでのみ、偶然モデレートされたメッセージを削除できますが、PushBulletでは削除できません。



All Articles