FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: kofri am 04 Mai 2017, 17:53:29

Titel: FHEM lernt iMessage
Beitrag von: kofri am 04 Mai 2017, 17:53:29
Hallo Forum,

ich hoffe jemand findet das folgende nützlich. (Sonst zumindest als Doku für mich.)

Ich will euch eine Möglichkeit zeigen, aus FHEM iMessages zu verschicken. Dafür benötigt ihr einen Mac, von dem die iMessages versendet werden. Außerdem ein kleines Skript was ich hier gefunden habe (https://liddlethoughts.wordpress.com/2015/03/23/programmatically-sending-an-imessage-from-osx/). Folgendes in den Skript-Editor und als App speichern.

on run {targetBuddyPhone, targetMessage}
  tell application "Messages"
    set targetService to 1st service whose service type = iMessage
    set targetBuddy to buddy targetBuddyPhone of targetService
    send targetMessage to targetBuddy
  end tell
end run


Mit Nodejs habe ich einen kleinen Dienst geschrieben, der auf einem Port nach Anfragen lauscht.

const http = require('http')
const port = 8888 // Der Port auf dem gelauscht wird.
const exec = require("child_process").exec
const app = 'Pfad/zur/AppleSkript.app'

const requestHandler = (request, response) => {
  var number = request.url.split(':')[0].split('?')[1] // Die Nummern werden aus dem Request extrahiert.
  var message = request.url.split(':')[1].replace(/%20/g, " ") // Die Nachricht wird extrahiert und die Leerzeichen leserlich gemacht.
  var now = new Date()
  var numbers = number.split(',') // Die Nummern werden in ein Array geschrieben.
  for (var i = 0, len = numbers.length; i < len; i++) // Für jeden Nummer wird:
  {
    console.log(now + ": " + numbers[i] + ": " + message) // eine Zeile ins Terminal geschrieben,
    exec('osascript ' + app + ' "' + numbers[i] + '" "' + message + '"')// das AppleSkript aufgerufen
  }
  response.end()
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
  if (err) {
    return console.log('something bad happened', err)
  }
  console.log(`server is listening on ${port}`)
})


Sobald der Nodejs Dienst läuft, kann man aus dem Browser testen, ob eine iMessage versendet wird.

http://127.0.0.1:8888/?0123456789:Test


In FHEM habe ich folgende Sub geschrieben, die CURL benötigt:

sub iMessage($$)
{
  my $number = @_[0];
  my $message = @_[1];
  $message =~s/ /%20/g;
  my $cmd = 'curl http://eu.re.i.p:8888/?'. $number. ':'. $message;
  Log 1, $cmd;
  {system($cmd)}
}


Number kann eine Nummer sein oder mehrere durch Komma getrennte Nummern.

Damit FHEM nun nicht meine iMessage Chats zu spamt, habe ich die Account-Einstellungen von iMessage am Mac wie folgt eingestellt:
Du kannst für Nachrichten erreicht werden unter:
  Telefonnummer deaktivieren
Neue Konversation starten von:
  Habe ich die @icloud.com Adresse verwendet, die ich sonst nicht benutze.

Am iPhone noch einen Kontakt anlegen, der genau die verwendete Adresse besitzt.
Und nun sollte FHEM euch iMessages schicken können.
Falls ihr noch Verbesserungsvorschläge oder Anregungen habt, immer her damit.
Titel: Antw:FHEM lernt iMessage
Beitrag von: P.A.Trick am 04 Mai 2017, 22:03:54
Cool wäre eine Lösung ohne Mac :-)
Titel: Antw:FHEM lernt iMessage
Beitrag von: justme1968 am 04 Mai 2017, 22:11:07
vermutlich keine realistische chance :)
Titel: Antw:FHEM lernt iMessage
Beitrag von: kofri am 04 Mai 2017, 23:02:06
Zitat von: P.A.Trick am 04 Mai 2017, 22:03:54
Cool wäre eine Lösung ohne Mac :-)

Mit einem "gejailbreakten" iDevice könnte es noch funktionieren. Das muss dann allerdings immer zuhause bleiben.
Titel: Antw:FHEM lernt iMessage
Beitrag von: saschae am 25 November 2017, 09:13:44
Ich steh grad auf dem Schlauch ....

Wo lege ich das NodeJs hin und wie wird es gestartet ?
Titel: Antw:FHEM lernt iMessage
Beitrag von: kofri am 06 Dezember 2017, 10:44:15
Das Apple-Skript und das NodeJs müssen auf dem Mac liegen. Das NodeJs wird im Terminal gestartet und läuft dann, bis es beendet wird.
Titel: Antw:FHEM lernt iMessage
Beitrag von: Black7king am 06 Dezember 2017, 17:06:20
Wäre es den auch möglich Bilder zu versenden?
Titel: Antw:FHEM lernt iMessage
Beitrag von: kofri am 06 Dezember 2017, 23:04:54
Ja, Bilder versenden ist mit leicht angepasstem Apple-Skript auch möglich.
Am Wochenende kann ich mal schauen, ob ich die Version noch irgendwo auf der Festplatte finde.
Titel: Antw:FHEM lernt iMessage
Beitrag von: Markus M. am 06 Dezember 2017, 23:07:26
Für die Version mit dem alten iPhone hatte ich bereits ein Modul gebastelt:
https://forum.fhem.de/index.php/topic,77131.0.html (https://forum.fhem.de/index.php/topic,77131.0.html)
Schon gesehen? :)

Ok, 0 Downloads - also eher nicht
Titel: Antw:FHEM lernt iMessage
Beitrag von: kofri am 15 Dezember 2017, 12:59:29
Hier der Code für das Applescript, um Bilder zu versenden.
targetFile ist der Pfad zu dem Bild, das versendet werden soll.

on run {targetBuddyPhone, targetFile}
set Attachment to POSIX file targetFile
tell application "Messages"
set targetService to 1st service whose service type = iMessage
set targetBuddy to buddy targetBuddyPhone of targetService

send Attachment to targetBuddy
end tell
end run
Titel: Antw:FHEM lernt iMessage
Beitrag von: Black7king am 17 Dezember 2017, 19:14:07
Zitat von: kofri am 15 Dezember 2017, 12:59:29
Hier der Code für das Applescript, um Bilder zu versenden.
targetFile ist der Pfad zu dem Bild, das versendet werden soll.

on run {targetBuddyPhone, targetFile}
set Attachment to POSIX file targetFile
tell application "Messages"
set targetService to 1st service whose service type = iMessage
set targetBuddy to buddy targetBuddyPhone of targetService

send Attachment to targetBuddy
end tell
end run


Vielen Dank!

ich werde es die Tage mal testen bzw. spätestens Weihnachts Feiertage.