NEWS
Nochmal: Globale Variable
-
Wenn Du das NPM-Modul "serialport-gsm" in Javascript nutzen möchtest, musst Du es in die Konfigration der Javascript-Instanz unter "Zusätzliche NPM-Module" eintragen. Es wird dann automatisch installiert. Die Nutzung des Modules ist auf https://github.com/zabsalahid/serialport-gsm beschrieben.
-
Ja das ist klar und funktioniert auch. Mein Problem ist, dass ich aus mehreren Skripten auf die Modem-Schnittstelle zugreifen möchte. D.h. ich muss die modem bzw. port Objekte global sichtbar machen.
-
aus mehreren Skripten auf die Modem-Schnittstelle zugreifen möchte.
Dann schaffe Dir dafür Datenpunkte, die zur Kommunkation zu dem Skript mit dem require("serialport-gsm") dienen.
-
ok, werde ich so machen - finde ich aber ziemlich umständlich. Ich werde also
-
2 states mit den zu sendenden bzw. empfangenen SMS Daten erzeugen
-
2 Eventhandler schreiben die das Senden bzw. Empfangen erledigen
Trotzdem danke für den Hinweis!
Was mich aber dennoch interessiert: warum funktionieren die Standard Node.js Methoden module.export / require nicht?
-
-
warum funktionieren die Standard Node.js Methoden module.export / require nicht?
Funktioniert die wirklich nicht ? Ich habe dies noch nicht getestet. In welches Verzeichnis hast Du Dein Modul gepackt ?
-
Alle Module stehen in einem Verzeichnis namens 'Testscripts'. Wenn ich dann versuche, das Objekt mit````
var modem = require('./Hauptsteuerung').modem -
Deshalb meine Frage, wo die Scripte eigentlich im Dateibaum gespeichert werden.
Eigene Module solltest Du in einem eigenen Verzeichnis unter /opt/iobroker/node_modules/iobroker.javascript/node_modules/ speichern. Habe es gerade probiert: Funktioniert.
const test = require('lib/test.js'); log(test().result);
-
Danke für den Hinweis. Das heißt dann aber: iobroker Scripts != Javascript Modul - oder?
-
Ein bisschen Off- Topic. Ich finde die Steuerung über SMS interessant und auch für mich ist das eine Anwendung.
Könntest Du sagen, welches GSM Serial Modul genau Du verwendest und ggf. auch welchen Provider?
-
Ich habe das mit dem eigenen Module mal ausprobiert und es scheint zu funktionieren.
Der Ansatz scheint aber einen großen Nachteil zu haben, nämlich, dass das Module nur einmal geladen wird, wenn es noch nicht vorhanden ist oder auch bei Neustart des Javascript Adapters
D.h. falls ich Änderungen in dem Module mache, muss ich immer den Javascript Adapter neu starten, was ziemlich umständlich ist.
Ich habe keinen Weg gefunden, ein neues Laden des Modules im Script zu erzwingen, jedesmal, wenn das Script neu gestartet wird.
-
Damit die eigenen Module bei einem Update nicht verloren gehen bzw. im Minimal-Backup mit gesichert werden, sollten sie im Verzeichnis iobroker-data gespeichert werden. Ich habe dafür das Verzeichnis modules erstellt. Der Aufruf eigener Module sieht dann so aus:
const test = require('../../../iobroker-data/modules/test.js'); log(test().result);