NEWS
iOS Device mit Jailbreak VIS/ioBroker Integration
-
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? -
@haselchen Ja habe ich
-
@aragon kannst du denn wenn der Fehler bei ioBroker auftritt per Putty (Windows) oder Terminal (Mac/Linux) eine SSH Verbindung aufbauen? Wenn das schon nicht geht, liegt es ja wie von mir bereits schon geschrieben am Gerät und es müsste da nach Fehler gesucht werden wie ebenfalls schon geschrieben, dass das Gerät vielleicht in einen Ruhemodus geht und WLan abschaltet.
Da das Skript ja erst funktioniert und nach drei Stunden nicht mehr würde ich den Fehler am Gerät vermuten.
Hast du schon mal einen Dauerping oder die Tweaks versucht? Du müsstest da schon ein bisschen mithelfen und input liefern was du schon versucht hast. Das keine Verbindung mehr aufgebaut werden kann wissen wir ja schon vom ersten Post