NEWS
iOS Device mit Jailbreak VIS/ioBroker Integration
-
Aus gegebenen Anlass und Anfragen vom mehrern Usern hier mal ein Extra Post von meiner Anleitung aus diesen Thread wie man sein iOS Device mit Jailbreak gut für VIS benutzen kann und auch andere nützliche Dinge um das iOS Device in ioBroker zu integrieren.
Das ganze funktioniert auch mit dem neuen iOS 12.2 Jailbreak.
Fragen hierzu bitte nur in diesen Thread stellen, da es im anderen Thread eigentlich nicht hin gehört.@el_malto sagte in IoBroker.vis View für iPad (Fluransicht):
Es sind eigentlich ganz coole Sache und man kann so seine iOS Geräte mit ins SmartHome integrieren.
Voraussetzungen Hardware:
-
iOS Gerät mit Jailbreak (ich habe es auf iPhone 7 und iPad Air 2 mit iOS 11.3.1 und unc0ver Jailbreak getestet)
-
ioBroker und son Zeugs, ist ja klar
-
JavaScript Adapter
-
simple API Adapter
Tweaks und Pakete aus Cydia:
-
Activator
-
cURL
-
OpenSSH
-
SSH Toggle and Port (optional, finde ich ganz nützlich um SSH schnell Ein/Aus zu schalten)
-
iNoSleep (optional, um die WLAN Verbindung auch bei gesperrtem Zustand aufreicht zu erhalten. Klappt bei mir auch ohne. Ich kann jederzeit eine SSH verbindung zum iPad aufbauen)
-
PassBy (nur für iOS 9 - 12) um die Codesperre vom Device zu umgehen und so direkt in die App oder auf den Homescreen zu kommen.
SSH Verbindung zum iOS Gerät um die Activator actions zu bekommen:
Damit wir wissen welche Activator actions wir benutzen können, gibt es einen einfachen Weg diese vom iOS Gerät via SSH auszulesen.
Da ich nur mit Windows arbeite, benutze ich Putty um mich per SSH mit dem iOS Gerät zu verbinden. Mit macOS kann man das über Terminal machen. Anleitungen im Netz gibt es genug.
Also in Putty die IP vom iOS Gerät eingeben und verbinden. Standard Benutzername ist "root" und Passwort ist "alpine".
logins as: root root@192.168.x.xx´s password: alpine
Kleiner Sicherheitshinweis nebenbei. Es empfiehlt sich immer das root Passwort zu ändern. Da dieses bekannt ist und wenn ihr euch so in einem öffentlichen Netzwerk aufhaltet, kann jeder wenn er will großen Schaden anrichten. Ich schalte sobald ich nicht zu Hause im Netzwerk bin deshalb immer mit dem Tweak SSH Toggle and Port SSH einfach aus.
Danach schauen wir uns an was wir mit Activator so machen können. Dazu geben wir "activator help" ein.
iPad-Air-2:~ root# activator help Usage: activator listeners activator events activator modes activator current-mode activator current-app activator get <key>activator set <key><value>activator activate <event>[<listener>] activator send <listener>activator deactivate</listener></listener></event></value></key></key>
Um nun die listeners zu bekommen geben wir "activator listeners" ein.
iPad-Air:~ root# activator listeners com.apple.Home libactivator.shortcut:science.xnu.undecimus:Jailbreak science.xnu.undecimus libactivator.shortcut:com.google.ios.youtube:Suchen libactivator.shortcut:com.google.ios.youtube:Abos libactivator.shortcut:com.google.ios.youtube:Erstellen com.google.ios.youtube com.apple.DocumentsApp com.apple.podcasts ws.hbang.Terminal com.google.Authenticator com.realvnc.VNCViewer com.apple.Music com.apple.mobileslideshow com.elgato.eve co.dynastic.tsssaver com.apple.tv org.videolan.vlc-ios libactivator.shortcut:com.apple.AppStore:Suchen libactivator.shortcut:com.apple.AppStore:Einlösen libactivator.shortcut:com.apple.AppStore:Käufe com.apple.AppStore com.teamviewer.rc libactivator.shortcut:com.apple.Preferences:Bluetooth libactivator.shortcut:com.apple.Preferences:WLAN ... ... ... usw...
Jetzt sehen wir eine lange Liste mit allen listeners die wir über SSH zum iOS Gerät Senden können (hier abgekürzt).
Hier eine kleine Erklärung wenn der ein oder andere nur Bahnhof "sieht"
Apps sehen in der Regel so aus:
com.apple.Home com.google.ios.youtube com.apple.Music com.apple.AppStore com.google.Maps usw
Klingeltöne:
libactivator.ringtone.texttone:Minuet libactivator.ringtone.texttone:Photos Sharing Post libactivator.ringtone.texttone:Glass libactivator.ringtone.texttone:Circles usw
Einstellungen:
libactivator.settings.keyboard libactivator.settings.battery usw
Ich denke das reicht erstmal. Wenn man sich die listeners genau anguckt, versteht man eigentlich schnell was dahinter steckt.
Um diese listeners jetzt benutzen zu können, müssen wir einfach "activator send <listener>" eingeben.
Beispiel für Gerät sperren:
activator send libactivator.system.sleepbutton
Beispiel für Gerät entsperren:
activator send libactivator.lockscreen.dismiss
Damit ihr beim entsperren direkt auf dem Homescreen landet, müsst ihr euren Passcode deaktivieren.
Wenn ihr ein iOS Gerät mit iOS 9-12 habt, kann ich euch den Tweak PassBy empfehlen. Mit diesen könnt ihr die Eingabe des Codes überspringen. Wenn ihr den Tweak eingestellt habt, bekommt ihr neue Activator Actions. der zum entsperren sieht z.B. so aus:activator send com.giorgioiavicoli.passby.unlock
Damit könnt ihr dann trotz eines Codes direkt auf eure VIS gehen.
Ich habe mir die VIS Seite auf dem Homescreen gespeichert (inzwischen gibt es ja nun auch schon eine VIS App), damit ich diese im Fullscreen habe. Wenn man nun die "VIS App" vor dem sperren öffnet, gelangt man mit den command direkt in die App.
Bevor ihr euch jetzt eine bestimmte App in der Liste sucht, könnt ihr wenn diese geöffnet ist einfach mit
activator current-app
den Appnamen anzeigen lassen. Die "VIS App" wird in der Liste nicht aufgeführt. Diese heißt bei mir:
com.apple.webapp
Diese kann man nun mit
activator send com.apple.webapp
öffnen. Oder einfach den namen von der VIS App suchen und benutzen.
Das Prinzip mit den activator listeners sollte nun klar sein.
Damit wir aber mit ioBroker diese listeners zum iOS Gerät senden können, benötigen wir https://github.com/steelbrain/node-ssh. An dieser Stelle nochmal ein großes Danke an @AlCalzone für die Unterstützung und das Script von hier.
In den Einstellungen von javascript.0 Adapter einfach unter "Zusätzliche NPM-Module" "node-ssh" eingeben. Der Adapter installiert das Modul automatisch. Dann den Haken bei "Erlaube das Kommando "exec"" setzen und speichern.
Es gibt nun zwei Möglichkeiten das JavaScript zu benutzen:
-
- als eigenständiges Script (kann so dann auch aus anderen Scripten gestartet werden
-
- als Script was in dem eigenlichen Blockly gestartet wird.
Möglichkeit 1.
Jetzt benötigen wir ein neues JavaScript (ipad_screen_on) und fügen folgendes ein:node_ssh = require('node-ssh'); ssh = new node_ssh(); ssh.connect({ host: '192.168.x.xx', username: 'root', password: 'alpine' }).then(() => { ssh.execCommand("activator send libactivator.lockscreen.dismiss"); }) setStateDelayed('javascript.0.scriptEnabled.common.ipad_screen_on', false, 5000);
Natürlich den "host", "username" und "password" anpassen. In den ("Gänsefüßchen") bei ssh.execCommand steht nun der SSH command die wir von oben kennen. In diesem Beispiel für Gerät entsperren. Wenn ihr alles richtig gemacht habt, wird beim starten des Skriptes das iOS Gerät entsperrt.
Mit der ZeilesetStateDelayed('javascript.0.scriptEnabled.common.ipad_screen_on', false, 5000);
Wird das Script wieder aus gemacht. Hier müsst ihr ggf. noch den Namen eures erstellten Javascriptes anpassen. Bei meinem Beispiel ja "ipad_screen_on".
Möglichkeit 2:
Hier ein Danke an @ahfreezer für die Beschreibung. Der einfachheithalber zitiere ich dich mal dreißt:
@ahfreezer sagte in IoBroker.vis View für iPad (Fluransicht):@el_malto
Hi,
ich kann zwar kein JS Skript aber mit Blockly lässt sich das doch ganz gut lösen.1.) Neues Blockly erstellt
Innerhalb des Blockly eine Funktion erstellt.
Dann in dem Funktion-Editor des JS Code kopiert.
und speichern. Anschließend habe ich die Funktionen entsprechend benannt
Nun kannst du über normale Trigger (Statusänderung) die Funktionen direkt ansprechen.
VG
Nachdem wir nun wissen wie wir unser iOS Gerät steuern können, fehlt nun noch die Integration vom iOS Gerät in unser SmartHome. Sprich, wenn das iOS Gerät bestimmte Zustände hat, dass diese an ioBroker gesendet werden.
Hier bedienen wir uns wieder an Activator und dem Paket „cURL“ sowie den simple API Adapter um HTTP requests mit ioBroker empfangen zu können. Mit hilfe der HTTP requests können wir nun jeden Datenpunkt in ioBroker steuern.
Um zu überprüfen auf welchen Port wir diese requests senden müssen gucken wir uns die Einstellungen vom Simple API Adapter an. Der Port ist standardmäßig auf 8087 eingestellt. Um erstmal die generelle Funktion zu testen, suchen wir uns einen beliebigen Datenpunkt aus. Ich nehme eine sonoff Steckdose und der Datenpunkt heißt „sonoff.0.DVES_2DCB41.POWER“. Um diesen nun direkt über HTTP einschalten zu können öffnen wir einen Web Browser und geben folgenden Link (Befehl) ein.
http://192.168.x.xx:8087/set/sonoff.0.DVES_2DCB41.POWER?value=true
Nun sollte in meinem Fall die sonoff Steckdose an gehen. Die Adresse ist wie folgt aufgebaut:
http://<ipiobroker>:<port>/set/<namedatenpunkt>?value=true
true=ein, false=off. Ich denke das Prinzip ist hier auch einfach zu erkennen.
Wenn das nun funktioniert können wir jetzt mit Hilfe von Activator und "cURL" diese Adresse aufrufen und so beliebige Datenpunkte steuern.
Entweder man bedient sich an den schon vorhandenen Ereignissen und Aktionen die Activator vor gibt, oder mann erstellt eigene Ereignisse und Aktionen wie im Beispiel.
Beispiel: Speckdose mit Ladegerät einschalten wenn Akku weniger als 5% hat.
In Activator->"Überall"->oben rechts auf "Erstellen"->"Batterieladung fällt"->Slider auf 5% ziehen->oben rechts auf "Sichern"->runter scrollen und gucken ob das Ereignis erstellt wurde und oben rechts auf "Fertig".
Nun das neu erstellte Ereignis „Batterieladung erreicht weniger als 5%“ suchen und auswählen. Dann wieder oben rechts auf „Erstellen“ klicken und dann “Befehlt ausführen“. Bei "Titel" einen logischen Namen aussuchen. Bei "Befehl" dann
sudo curl -s http://192.168.x.xx:8087/set/sonoff.0.DVES_2DCB41.POWER?value=true >/dev/null
eingeben und wieder oben rechts auf "Sichern" klicken, gucken ob die Aktion erstellt wurde und oben rechts auf "Fertig" klicken. Nun den neu erstellten Befehlt suchen und auswählen. Jetzt kann man oben links auf den "zurück" Pfeil zurück gehen und die Einstellungen sind fertig.
Wenn jetzt die Batterieladung auf unter 5% fällt, sendet das iOS Gerät dein HTTP request und schaltet direkt die Steckdose ein. Um die Steckdose bei z.B. 100% Akkuladung wieder auszuschalten, erstellen wir wieder ein neues Ereignis mit "Batterieladung Steigt" und schieben den Slider auf 99%. Dann erstellen wir wieder eine neue Aktion mit "Befehl ausführen" und geben als Befehl nun den gleichen HTTP request ein nur mit "false" am Ende um die Steckdose wieder auszuschalten.
sudo curl -s http://192.168.x.xx:8087/set/sonoff.0.DVES_2DCB41.POWER?value=false >/dev/null
Es kann sein das bei einigen der Befehl "sudo" nicht benötigt wird. Danke an @der-eine für die Rückmeldung hier.
So haben wir nun eine automation erstellt und das iOS Gerät läd sich selbstständig. Wenn man keine Steckdose beim iPAd hat, kann man natürlich auch andere Dinge damit steuern. Z.B. eine Leuchte einschalten oder eine Push Nachricht mit Pushover oder IFTTT senden das der iPad Akku bald leer ist.
Ich denke auch hier ist das Prinzip schnell klar und nun kann man seiner Kreativität freien lauf lassen was man damit so anstellen kann.
Hier mal ein paar weitere Beispiele die ich bisher umgesetzt habe.
In VIS anzeigen ob das iOS Gerät angeschlossen ist und Alexa sprechen lassen:
Datenpunkt ertellt mit "ipad_plugged_in". Diesen Datenpunkt schreibe ich mit Activator "Wenn Netzkabel Verbunden" oder "Wenn Netzkabel Getrennt" und HTTP requests auf "ture" oder "false" So kann ich z.B. in der VIS anzeigen lassen ob das Gerät an Strom angeschlossen ist oder nicht. Ebenso kann man dann mit Blockly noch z.B. Alexa sagen lassen das das iOS Gerät nun aufgeladen wird. Der umgekerhte Fall geht natürlich auch.
Akku % Anzeige in VIS:
Datenpunkt erstellen den man mit Zahlen beschreiben kann -> "ipad_akku". Hierfür hab ich neue Ereignisse in 5er Schritten angelegt mit "Batterie steigt" (5er Schritte reichen mir aus). Diese Ereignisse habe ich nun mit neu angelegten Aktionen verknüpft die immer einen HTTP request senden
sudo curl -s http://192.168.x.xx:8087/set/javascript.0.meineDatenpunkte.ipad_akku?value=65 >/dev/null
für z.B. 65%. Das ganze kann man natürlich auf für "Batterie fällt" anlegen.
Alexa Akku % ansagen lassen wenn man das iOS Gerät vom Netz trennt:
Wenn der Datenpunkt "ipad_plugges_in" von oben auf "false" gesetzt wird, Alexa den Datenpunkt "ipad_akku" von oben vorlesen lassen. Dieser ist ja mit den aktuellen Akku % beschrieben und Alexa sagt den Akkustand an.
iPad Display für VIS einschalten wenn jemand nach Hause kommt oder mit einen Bewegungsmelder erkennt wenn jemand vorm iPad steht:
Wenn Anwesenheit erkannt oder Bewegung erkannt wird, mit dem SSH Skript von oben "activator send libactivator.lockscreen.dismiss" senden und das iPad Display geht an. Umgekehrter Fall geht natürlich auch mit "activator send libactivator.system.sleepbutton" wenn alle Personen abwesend sind.
Aus VIS heraus eine App öffnen:
Ein Blockly erstellen das ein SSH Skript ausführt. Dieses Skript dann in der VIS verlinken. Der Weg von der App zurück zu VIS geht natürlich nicht. Man könnte jedoch im Skript mit einem Timer die "VIS App" nach einer bestimmten zeit wieder automatisch öffnen lassen.
Bestimmte Szenen oder was auch immer schalten wenn Wecker vom iOS Gerät ausgestellt wird:
Einen Blockly toggle erstellen und diesen mit Activator auf true setzen wenn man den Wecker ausstellt. Damit kann man dann z.B. Licht einschalten, Kaffeemaschine anstellen, Alexa automatisch die News oder was auch immer vorlesen lassen usw.
Für Leute wie mich die gerne mal die Schlummertaste drücken könnte man auch was basteln was z.B. nach dem 3. mal Schlummern Musik an macht oder irgendwas wo man dann wirklich aufstehen muss
Bestimmte Apps loggen:
Wenn eine bestimmte App geöffnet wird dieses mit Hilfe von cURL in einen Datenpunkt schreiben.
Wie ihr seht kann man damit nützliche oder weniger nützliche Sachen machen. Wenn das Prinzip erstmal klar ist kann man sich schön austoben.
Ich hoffe der Post ist nicht zu lang geworden und verständlich. Hab jetzt einfach wild west drauf los geschrieben und versucht es einigermaßen logisch zu beschreiben. Der Glühwein vom Weihnachtsmarkt hat schon wieder zu gut geschmecktBei Fragen gerne wieder melden. Würde mich auch freuen wenn andere ihre Ideen und Umsetzungen dann hier posten würden. Man ist ja immer auf der Suche nach neuen Sachen.
UPDATE:
- 18.02.19: Formatierung an das neue Forum angepasst und User Feedback eingearbeitet.
- 28.05.19: Tweak PassBy eingepflegt, Beschreibung von @ahfreezer für JavaScript in Blockly eingefügt
-
-
Puh. Lange Anleitung.
Aber vielleicht nur ganz kurz. Ich betreibe mein iPad Air 2 mit iOS 13.2.2 und der ioBroker App für iOS im geführten Zugriff. Das Display kann man dann sehr einfach mit einer simplen Push-Nachricht aktivieren (erzeuge ich mir über meine CCU3, die entsprechend auf einen Bewegungsmelder reagiert). Danach wird auch sofort vis angezeigt. Ganz ohne Passworteingabe oder dergleichen. Es funktioniert in analoger Weise auch ohne die ioBroker App mit einem Link auf das vis-Projekt, den man sich auf den Home Screen ablegt und im geführtem Zugriff startet.
Was ich nicht über das iPad mache, sind Sprachausgaben oder dergleichen. Das Ding soll einfach nur stumm an der Wand hängen, wobei ich es eigentlich auch ganz gerne als Video-Gegensprechstelle für meinen DoorPi nutzen würde. Video ist über vis kein Problem, nur mit dem Gegensprechen sieht's leider etwas mau aus. Aber so wirklich habe ich mich damit noch gar nicht beschäftigt. Vielleicht kann man ja über vis auch irgendwie die FRITZ!App Fon im Hintergrund rangehen lassen.
Ich lasse mein iPad übrigens 24/7 am Strom, weil das aus meiner Sicht schonender für den Akku ist.
Sorry für's OT, aber ich wollte nur aufzeigen, dass man ein iPad auch recht gut ohne Jailbreak mit dem neuesten OS nutzen kann. Allerdings habe ich im Dauerbetrieb des iPad immer wieder Probleme mit dem Zugriff auf meine vis-Views nach längeren Pausen. Am WLAN kann's nicht liegen, weil ich mein iPad problemlos per Push-Nachricht "aufgeweckt" bekomme.
-
@dtp
Jo kein Ding. Wollte damit auch nur zeigen was man mit einem Jailbreak so alles machen könnte um Ideen anzustoßen oder so. -
Benötigt man denn für alles, was du da umgesetzt hast, einen Jailbreak? Ich persönlich bin da eher kein Freund von, weil ich immer sehr zeitnah das neueste iOS bzw. iPadOS installiere.
-
Bis auf deinen Workaround mit den „Geführten Modus“ und einer Notification ist mir nichts bekannt was die anderen beschriebenen Sachen angeht.
Bezüglich Jailbreak: Der checkra1n Jailbreak ist ja veröffentlicht worden. Bisher ist das Air 2 aber noch nicht supported. Kommt aber in Zukunft. Da der Jailbreak einen Hardware Exploit nutzt, ist der von der iOS Version unabhängig. Es müssen nur immer die Tweaks angepasst werden. Die meisten werden auch schnell angepasst. Leider ist der Developer von Activator, der Tweak der hier benutzt wird, nicht mehr so wirklich aktiv. Activator ist noch nicht mal komplett für iOS 12 angepasst. Bei iOS 13 läuft der Tweak gar nicht. Würde bei dir also bisher nicht funktionieren.
Ich hoffe das der Tweak bald an iOS angepasst wird. -
Hallo zusammen,
mir ist bekannt, dass das Thema schon etwas älter ist. Da ich aber genau diesen Fall bei mir zuhause betreiben möchte, krame ich das Thema wieder aus. Leider bin ich nocht nicht sonderlich bewandert im Thema JS. Daher die Frage ob jemadn mal über den Code aus dem Beispiel schauen kann ob der unter einem aktuellen ioBroker noch lauffähig ist.
Was soll passieren: iPad über SSH aufwecken wenn Bewegungsmelder anschlägt.
Der Befehl (von putty am PC gesendet):activator send libactivator.lockscreen.dismiss
...weckt mein iPad. Das funktioniert also bereits.
Ich bekomme es nur nicht hin mich mit node-ssh mit dem Pad zu verbinden und anschließend den Befehl zu senden.
Habe mich an das Beispiel gehalten:
node_ssh = require('node-ssh'); ssh = new node_ssh(); ssh.connect({ host: '192.168.x.xx', username: 'root', password: 'alpine' }).then(() => { ssh.execCommand("activator send libactivator.lockscreen.dismiss"); }) setStateDelayed('javascript.0.scriptEnabled.common.ipad_screen_on', false, 5000);
IP, User und PW eingetragen, bekomme aber denoch die unterschiedlichsten Fehler beim Starten des Scriptes.
- javascript.0 2020-11-02 19:35:31.256 error (23414) at Script.runInContext (vm.js:130:18)
- javascript.0 2020-11-02 19:35:31.256 error (23414) at script.js.iPad_an:2:7
- javascript.0 2020-11-02 19:35:31.255 error (23414) TypeError: node_ssh is not a constructor
- javascript.0 2020-11-02 19:35:31.255 error (23414) ^
- javascript.0 2020-11-02 19:35:31.254 error (23414) ssh = new node_ssh();
- javascript.0 2020-11-02 19:35:31.253 error (23414) script.js.iPad_an: script.js.iPad_an:2
Wenn ich daran experimentiere wirds nur schlimmer Vermute mal hier hat sich an der Syntax inzwischen was geändert?
Idela wäre es für mich, wenn ich mir den Codeschnippsel als "Blackbox" in Blocky nutzbar machen könnte. Dann bekomme ich die Ansterung über den Bewegungsmelder auch mit meinem Möglichkeiten zusammengeklickt. Habe mal gelesen dies soll möglich sein. Vermutlich mit dem Block JS-Funktion?
Die Anleitung ist ansonsten spitze Nur der Activator stürzt bei mir beim Erstellen der neuen Befehle immer ab. Jailbreak eben...
Besten Dank vorab.
Edit: ganz vergessen. Benutz mein uhrzeitliches iPad3 (iOS 9.3.5) welches für VIS aber allemal noch ausreicht.
-
@manu4771 teste das mal:
https://forum.iobroker.net/topic/36076/fehler-im-script-node_ssh-is-not-a-constructor
bin die nächsten Tage nicht zu Hause und kann nicht testen. Hab die Steuerung gerade nicht mehr aktiv. -
@manu4771 Ist ja nun doch schon etwas älter, aber die Lösung war für mich folgende:
const node_ssh = require('node-ssh').NodeSSH; const ssh = new node_ssh(); ssh.connect({ host: '192.168.xx.xxx, username: 'xxxx', password: 'xxxxxxx' }).then(() => { ssh.execCommand("activator send libactivator.lockscreen.dismiss"); })
Also in den ersten zwei Zeilen einfach ein "const" davor. Vielleicht hilft es ja jemandem weiter.
-
Vielen Dank für die super Anleitung, ich habe jedoch ein Problem mit der SSH Verbindung. Ich habe auf meinem iPad 3 (iOS 9.3.5) OpenSSH installiert und konnte mich anfangs auch super damit verbinden. Aufwecken über Activator hat auch geklappt. Nach einer gewissen Zeit bekomm ich allerdings, wenn ich versuche mit über SSH zu verbinden folgende Meldung:
kex_exchange_identification: Connection closed by remote host
Neuinstallation von OpenSSH hilft kuzzeitig - dann wieder gleicher Fehler. Hat da jemand Ahnung was man machen könnte?
-
@smet-o sagte in iOS Device mit Jailbreak VIS/ioBroker Integration:
@manu4771 Ist ja nun doch schon etwas älter, aber die Lösung war für mich folgende:
const node_ssh = require('node-ssh').NodeSSH; const ssh = new node_ssh(); ssh.connect({ host: '192.168.xx.xxx, username: 'xxxx', password: 'xxxxxxx' }).then(() => { ssh.execCommand("activator send libactivator.lockscreen.dismiss"); })
Also in den ersten zwei Zeilen einfach ein "const" davor. Vielleicht hilft es ja jemandem weiter.
Ja das habe ich auch letztens gemerkt. Bei node-ssh hat hat sich was geändert -> https://www.npmjs.com/package/node-ssh
Nach der Anpassung wie im "Example" hat es wieder funktioniert.@smet-o sagte in iOS Device mit Jailbreak VIS/ioBroker Integration:
Nach einer gewissen Zeit bekomm ich allerdings, wenn ich versuche mit über SSH zu verbinden folgende Meldung:
kex_exchange_identification: Connection closed by remote host
Neuinstallation von OpenSSH hilft kuzzeitig - dann wieder gleicher Fehler. Hat da jemand Ahnung was man machen könnte?
Immer? Also auch wenn dein iPad normal entsperrt ist und sich im Wlan befindet?
Wenn es nur passiert, wenn es gesperrt ist kann es sein, dass das iPad dann die Wlan Verbindung kappt.
- iNoSleep (optional, um die WLAN Verbindung auch bei gesperrtem Zustand aufreicht zu erhalten. Klappt bei mir auch ohne. Ich kann jederzeit eine SSH verbindung zum iPad aufbauen)
-
@el_malto Jap immer, nur wenn ich OpenSSH neu installiere klappt es ne zeitlang. iNoSleep hab ich schon installiert. Wenn ich -vvv dazu gebe bekomme ich folgendes, wirklich schlau werde ich daraus allerdings nicht:
OpenSSH_8.1p1, LibreSSL 2.7.3 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 47: Applying options for * debug2: resolve_canonicalize: hostname 192.168.xxx.xxx is address debug2: ssh_connect_direct debug1: Connecting to 192.168.xxx.xxx [192.168.xxx.xxx] port 22. debug1: Connection established. debug1: identity file /Users/namel/.ssh/id_rsa type -1 debug1: identity file /Users/name/.ssh/id_rsa-cert type -1 debug1: identity file /Users/name/.ssh/id_dsa type -1 debug1: identity file /Users/name/.ssh/id_dsa-cert type -1 debug1: identity file /Users/name/.ssh/id_ecdsa type -1 debug1: identity file /Users/name/.ssh/id_ecdsa-cert type -1 debug1: identity file /Users/name/.ssh/id_ed25519 type -1 debug1: identity file /Users/name/.ssh/id_ed25519-cert type -1 debug1: identity file /Users/name/.ssh/id_xmss type -1 debug1: identity file /Users/name/.ssh/id_xmss-cert type -1 debug1: Local version string SSH-2.0-OpenSSH_8.1 kex_exchange_identification: Connection closed by remote host
Wenn ich lokal auf dem iPad versuche über ein Terminal zu benutzen bekomme ich:
ssh exchange identification: Connection closed by remote host
Ich kenn mich nicht wirklich aus damit, aber zur Lösung hat mir das auch noch nicht geholfen...
-
@smet-o wenn das immer passiert dann hat es mit iNoSleep nichts zu tun sondern ist ein anderer Fehler.
Komisch ist, dass es nach dem installieren funktioniert und danach nicht mehr. Vielleicht crashed OpenSSH oder so. Vielleicht mal CrashReporter oder Cr4shed aus Cydia installieren. Die zeigen dir an wenn Prozesse oder so crashen.
Ansonsten vielleicht mal Dropbear ausprobieren. Das ist auch ein SSH Server. Weiß allerdings nicht ob der mit iOS 9 kompatibel ist. -
Also für alle die noch nach ner Lösung suchen... Ich habe das jetzt aktuell so gemacht:
Vorraussetzung ist Jailbreak. Habe die o.g. Sachen installiert - aber keine Ahnung ob Nötigconst node_ssh = require('node-ssh').NodeSSH; const ssh = new node_ssh(); ssh.connect({ host: '192.168.178.236', username: 'root', password: 'alpine' }).then(() => { setInterval(async function () { ssh.execCommand("ioreg -l -w0 | grep CurrentCapacity | head -1").then((function(result3) { var str = result3.stdout; var res = str.split(' '); var res1 = res[res.length - 1]; setState('vis.0.iPad_von_henri.battery.level', parseInt(res1)); } )); setTimeout(async function () { ssh.execCommand("ioreg -l -w0 | grep power").then((function(result3) { var str = result3.stdout; var str1 = str.match(/power status"=(.*?)"/ig); var str2 = str.search(/power status"=Yes/); if (str2 >=1){ setState('vis.0.iPad_von_henri.battery.state', "2"); }else{ setState('vis.0.iPad_von_henri.battery.state', "1"); } } )); }, 2000); }, 60000);} )
Damit bekommt Ihr Batteriestatus und Ladestatus in n DP geschrieben
PS ist quick n dirty... es Funktioniert. Fertig
-
@backfisch88 Guten Abend,
ich habe dieses Script kopiert und angepasst. (Host, username, password und die drei Datenpunkte)
Es läuft bei mir ca. 2 Tage, danach bekomme ich folgende Fehlermeldung (siehe Bild), kann mit bitte jemand helfen?
Das iPad Air is gejailbreakt und wird mittels Bewegungsmelder Aufgeweckt, dass funktioniert ganz gut und per DimMe wieder gesperrt.Fehlermeldung:
-
@aragon
1.) Sich an einen steinalten Thread dranzuhängen ist nicht wirklich sinnvoll. Inzwischen hat sich die Welt etwas weitergedreht.
2.) Auch ein ebenso altes Script zu übernehmen kann funktionieren, muss aber nicht.
3.) Texte bitte in Code-Tags </> einschließen und nicht als Screenshot -
@codierknecht Okay hier als Code-Tag.
2022-12-05 08:59:29.285 - [31merror[39m: javascript.0 (21463) script.js.common.Tablet.Tablet_Laden.Tablet_EG_Akkustand: Error: Not connected to server 2022-12-05 08:59:29.285 - [31merror[39m: javascript.0 (21463) at NodeSSH.getConnection (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-ssh/lib/cjs/index.js:119:19) 2022-12-05 08:59:29.286 - [31merror[39m: javascript.0 (21463) at NodeSSH.execCommand (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-ssh/lib/cjs/index.js:281:33) 2022-12-05 08:59:29.286 - [31merror[39m: javascript.0 (21463) at Object.<anonymous> (script.js.common.Tablet.Tablet_Laden.Tablet_EG_Akkustand:29:5) 2022-12-05 08:59:29.286 - [31merror[39m: javascript.0 (21463) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2362:34) 2022-12-05 08:59:29.286 - [31merror[39m: javascript.0 (21463) at listOnTimeout (internal/timers.js:557:17) 2022-12-05 08:59:29.286 - [31merror[39m: javascript.0 (21463) at processTimers (internal/timers.js:500:7)
-
@codierknecht Kann mir Bitte jemand helfen?
Hat vielleicht jemand ein funktionierendes Script für mich?
Ich nutze die iObroker App um meine Visualisierung, die ich mit iqontrol erstellt habe anzuzeigen.
Den Akkustand kann ich darüber leider nicht beziehen, um mein Tablet Smart zu Laden.
Mittlerweile läuft das Script 3 Stunden stabil, danach kommen diese Fehlermeldungen und der Akkustand, wird nicht mehr Übertragen. -
Wenn es ein paar Stunden funktioniert ist das Skript ja noch richtig.
Du siehst im Log doch schon woran es liegt.2022-12-05 08:59:29.285 - [31merror[39m: javascript.0 (21463) script.js.common.Tablet.Tablet_Laden.Tablet_EG_Akkustand: Error: Not connected to server
und
2022-12-05 08:59:29.286 - [31merror[39m: javascript.0 (21463) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2362:34)
IP Broker kann keine SSH Verbindung mehr zum iPad aufbauen. Sehr wahrscheinlich geht dein iPad in einen Ruhemodus und stellt die W-Lan Verbindung ab. Bei den Apple Geräten hat man leider keine 100%ige Kontrolle wann und wie was abgeschaltet werden soll.
Vielleicht könnte man die W-Lan Verbindung mit einen "Dauerping" o.ä. aufrecht erhalten. Müsstest du mal probieren und testen. Oder je nachdem was für eine iOS Version du hast die oben ganannten Tweaks die auch verhindern das sich das Gerät in den Ruhemodus versetzt.
Paar mehr Infos von dir wären vielleicht hilfreich. -
@el_malto Habe diese Fehlermeldung erhalten, ich vermute, dass es daran liegen könnte.
javascript.0 2022-12-28 20:34:09.497 error An error happened which is most likely from one of your scripts, but the originating script could not be detected.
javascript.0 2022-12-28 20:34:09.517 error Error: (SSH) Channel open failure: open failed
javascript.0 2022-12-28 20:34:09.537 error Error: (SSH) Channel open failure: open failed at onChannelOpenFailure (/opt/iobroker/node_modules/ssh2/lib/utils.js:16:11) at CHANNEL_OPEN_FAILURE (/opt/iobroker/node_modules/ssh2/lib/client.js:510:11) at 92 (/opt/iobroker/node_modules/ssh2/lib/protocol/handlers.misc.js:810:16) at Protocol.onPayload (/opt/iobroker/node_modules/ssh2/lib/protocol/Protocol.js:2025:10) at ChaChaPolyDecipherBinding.decrypt (/opt/iobroker/node_modules/ssh2/lib/protocol/crypto.js:851:26) at Protocol.parsePacket [as _parse] (/opt/iobroker/node_modules/ssh2/lib/protocol/Protocol.js:1994:25) at Protocol.parse (/opt/iobroker/node_modules/ssh2/lib/protocol/Protocol.js:293:16) at Socket.<anonymous> (/opt/iobroker/node_modules/ssh2/lib/client.js:713:21) at Socket.emit (events.js:400:28) at addChunk (internal/streams/readable.js:293:12) at readableAddChunk (internal/streams/readable.js:267:9) at Socket.Readable.push (internal/streams/readable.js:206:10) at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
Vielleicht ist dass Aussagekräftig.
Ich verstehe nur, dass es einen fehler beim öffnen der SSH Verbindung gibt.
Die Fehlermeldung wurde 10 Mal innerhalb einer Sekunde Protokolliert.Eben kamen diese Fehlermeldungen dazu:
javascript.0 2022-12-28 22:27:49.256 error Error: read EHOSTUNREACH at TCP.onStreamRead (internal/stream_base_commons.js:209:20) javascript.0 2022-12-28 22:27:49.256 error Error: read EHOSTUNREACH javascript.0 2022-12-28 22:27:49.254 error An error happened which is most likely from one of your scripts, but the originating script could not be detected.
-
@aragon
Hast du das Modul node-ssh überhaupt im JavaScript Adapter eingetragen?