Ich stelle ein Programm vor, das einen Windows 10 PC benachrichtigt, wenn der Android-Smartphone-Akku schwach ist.
Ich habe dies geschrieben, weil es so aussah, als könnte es Nachfrage geben.
Es sendet eine Audiobenachrichtigung auf dem PC, wenn der Android-Akku 15% erreicht.
Gesamtablauf
Jede einzelne Aufgabe ist nicht schwierig, aber wie üblich werden viele Technologien verwendet, sodass es je nach Situation Zeit in Anspruch nehmen kann, aber wenn Sie dies können, können Sie es auf andere Android-Datenaustausche anwenden, also versuchen Sie es bitte.
- Wenn der Android-Akku schwach wird, eine Webanfrage mit IFTTT stellen
- Mit einem Ubuntu Sinatra-Server empfangen und einen beliebigen Befehl in eine Datei schreiben
- Den Dateitext als Befehl ausführen. (Popup-Benachrichtigung; tts; etc)
- Holen Sie sich einen WiFi-Router, der Portweiterleitung kann.
Der beste WiFi-Router, abgeleitet vom Testen von 4 Routern nach optischem Leitungsbau
WSL
- Als jemand, der WSL (Windows Subsystem for Linux) von Anfang an verwendet, erkläre ich die Vorteile von WSL für Linux- und Programmieranfänger
- WSL bash on ubuntu on windows Installationsanleitung
Lassen Sie uns eine Ruby-Umgebung erstellen
Wir werden Sinatra mit Ruby ausführen. Es kann in 3 Minuten erledigt werden, also richten Sie die Umgebung schnell ein.
sudo apt update ; sudo apt install build-essential patch zlib1g-dev liblzma-dev ruby{,-dev} -y ; sudo gem install bundler
mkdir -p /mnt/c/pg/ruby_dev && cd $_
sudo bundle init
vim Gemfile
sudo bundle install
vim Gemfile
# add
gem "pry"
gem "sinatra"
Verfahren
- Portweiterleitung auf Ihrem WiFi-Router einrichten
- Ein Applet in IFTTT erstellen
this ... android battely
that ... webhooks
title(Beispiel) ... If Battery drops below 15%, then get request to server
URL(Beispiel) ... http://220.247.111.111:8005/android-battely
method ... get
type ... json
body ... (leer)
- IFTTT auf der Android-Seite einrichten
- Einen Windows-Ordner mounten, um Dateisynchronisation zu ermöglichen
sudo mount -t cifs //192.168.0.167/_sync_ ~/share -o user=user,pass=pass,dir_mode=0777,file_mode=0777
- So mounten Sie den freigegebenen Windows 10-Ordner in Ubuntu 18.04
- Mounten (Synchronisieren) des freigegebenen Windows 10-Ordners in Ubuntu 16.04
Wir werden später implementieren: Text zum Ausführen als Befehle in command.txt im Share-Verzeichnis speichern und ihn regelmäßig mit WSL lesen und ausführen.
Dies liegt daran, dass selbst wenn Sie Befehle direkt auf dem Server ausführen, soundbezogene Prozesse nicht funktionieren, weil der Prozess ein Unterprozess(?) ist, sodass Sie eine Datei durchlaufen müssen.
- Sinatra ausführen
Encoding.default_external = ‘UTF-8’
get “/android-battely” do
# binding.pry
stdout, stderr, statusCode = Open3.capture3( %( bash -c " host #{request.ip} | awk '{print $5}' | awk '/amazonaws.com|ifttt.com/' || echo '' " ) )
if stdout.to_s.strip.empty? then redirect to('/404') end
# puts "ok"
puts @body = request.body.read
stdout, stderr, statusCode = Open3.capture3( %( bash -ic "printf 'tts \\"android battery low\\"' > /home/yuis/share/command.txt || echo '' " ) )
puts stdout, stderr, statusCode
end
```bash
sudo bundle exec ruby dev.rb -o 0.0.0.0

Einfache Erklärung …
stdout, stderr, statusCode = Open3.capture3( %( bash -c " host #{request.ip} | awk '{print $5}' | awk '/amazonaws.com|ifttt.com/' || echo '' " ) )
if stdout.to_s.strip.empty? then redirect to('/404') end
Wenn Sie einen Server veröffentlichen, erhalten Sie ziemlich viel bösartigen Zugriff von Hackern. Wenn Sie dies ignorieren, könnte im schlimmsten Fall Ihr PC gehackt oder kaputt gehen, oder in diesem Beispiel erhalten Sie zumindest den ganzen Tag Benachrichtigungen.
Um solche Dinge zu filtern, ist es mit Sinatra lästig, aber es scheint gut zu sein, auf eine 404-Seite umzuleiten. Wir blockieren alle Zugriffe, die nicht von IFTTT kommen. Da IFTTT AWS ist, erlauben wir nur das.
Selbst damit ist AWS ziemlich weitreichend, sodass Sie möglicherweise immer noch seltsamen Zugriff erhalten. In diesem Fall können Sie auf der IFTTT-Seite Parameter zur GET-Anfrage als Token hinzufügen und auf der Serverseite zur Sicherheit authentifizieren.
printf 'tts \\"android battery low\\"'
Sie müssen in zwei Stufen escapen, Ruby und Bash, also verwenden Sie zwei Backslashes.
- Definieren Sie die Funktion, die auf der WSL-Seite verwendet werden soll
tts. Dies liest Text laut über PowerShell vor, indem Sie tts text tun.
TTS (text-to-speech) mit PowerShell
Führen Sie Folgendes in bash aus oder fügen Sie es in .bashrc ein.
tts ()
{
/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe - <<EOF
tts "${1}"
EOF
}
- Führen Sie ein Skript auf der WSL-Seite aus, das regelmäßig die Datei mit Befehlstext überwacht
echo -ne ”$(isodate)\tNothing updated on the clipboard.\033[0K\r”
[[ -s “$SHAREDDIR/command.txt” ]] && { eval ”$(cat “$SHAREDDIR/command.txt”)” ; > “$SHAREDDIR/command.txt” ; printf “A command excuted.” ; }
sleep 2s done

<ul>
<li>Testen Sie, ob es tatsächlich funktioniert</li>
</ul>
Bitte kommentieren Sie, wenn Sie Probleme haben.