FHEM lernt iMessage

Begonnen von kofri, 04 Mai 2017, 17:53:29

Vorheriges Thema - Nächstes Thema

kofri

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. 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.

P.A.Trick

Cool wäre eine Lösung ohne Mac :-)
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

justme1968

vermutlich keine realistische chance :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

kofri

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.

saschae

Ich steh grad auf dem Schlauch ....

Wo lege ich das NodeJs hin und wie wird es gestartet ?

kofri

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.

Black7king

Wäre es den auch möglich Bilder zu versenden?

kofri

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.

Markus M.

Für die Version mit dem alten iPhone hatte ich bereits ein Modul gebastelt:
https://forum.fhem.de/index.php/topic,77131.0.html
Schon gesehen? :)

Ok, 0 Downloads - also eher nicht
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

kofri

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

Black7king

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.