ioBroker Forum


Nutzungsbedingungen |Datenschutzrichtlinie
Cloud |Dokumentation
Aktuelle Zeit: 25.02.2018, 04:27

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Welche Umgebung für Entwicklung
BeitragVerfasst: 12.01.2018, 23:15 
Offline
starter

Registriert: 19.06.2017, 16:11
Beiträge: 23
Halo zusammen,

Welche Entwicklerumgebung benutzt ihr um Adapter zu entwickeln?


Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk


Nach oben
   
 Betreff des Beitrags: Re: Welche Umgebung für Entwicklung
BeitragVerfasst: 12.01.2018, 23:27 
Offline
guru
Benutzeravatar

Registriert: 10.04.2015, 12:27
Beiträge: 3547
Hat sich bedankt: 295 Mal
Danksagung erhalten: 328 Mal
Ich persönlich nutze Atom.io, andere Microsoft vscode und andere noch anderes.

IDEs die sich erweitern lassen und ne git oder sogar github Integration sind von Vorteil. Ich nutze zb so ein „Remote Sync“ Plugin für Stimmens geänderte files ( vom Laptop) dann auf den Rechner Synct beim speichern auf dem mein Test iobroker läuft.


Nach oben
   
 Betreff des Beitrags: Re: Welche Umgebung für Entwicklung
BeitragVerfasst: 12.01.2018, 23:39 
Offline
guru
Benutzeravatar

Registriert: 01.03.2016, 15:16
Beiträge: 1856
Hat sich bedankt: 74 Mal
Danksagung erhalten: 192 Mal
VSCode. Wenn das einmal ordentlich eingerichtet ist, gibts nix einfacheres IMO. Git-Integration, optional Type-Checking, etc...

_________________
Meine Adapter:
IKEA Trådfri: GitHub | Test & Hilfe
G-Homa: GitHub | Test & Hilfe


Nach oben
   
 Betreff des Beitrags: Re: Welche Umgebung für Entwicklung
BeitragVerfasst: 13.01.2018, 07:51 
Offline
starter

Registriert: 03.07.2016, 16:22
Beiträge: 57
Wohnort: Buchholz i.d. Nordheide
Hat sich bedankt: 95 Mal
Danksagung erhalten: 9 Mal
Da möchte ich mich mal einhängen ... Kämpfe mit den französischen Texten, weil die so sehr vom Kontext abhängig sind :oops:

AlCalzone hat geschrieben:
VSCode. Wenn das einmal ordentlich eingerichtet ist, gibts nix einfacheres IMO. Git-Integration, optional Type-Checking, etc...
Könntest Du mal Deine Einrichtung erläutern? :?


apollon77 hat geschrieben:
Ich nutze zb so ein „Remote Sync“ Plugin für Stimmens geänderte files ( vom Laptop) dann auf den Rechner Synct beim speichern auf dem mein Test iobroker läuft.
Genau so etwas möchte ich benutzen, um die Übersetzungen Schritt-für-Schritt auf dem Test-ioBroker nachzuschauen :D

_________________
HP Proliant DL380 G7 mit ESXi 6.5 für viele VMs, u.a. für ioBroker, InfluxDB, Asterisk, ecoDMS
RaspberryMatic mit zu vielen Aktoren und Arduino/Raspberry für Junkers-Gastherme-Logging


Nach oben
   
 Betreff des Beitrags: Re: Welche Umgebung für Entwicklung
BeitragVerfasst: 13.01.2018, 10:24 
Offline
guru
Benutzeravatar

Registriert: 01.03.2016, 15:16
Beiträge: 1856
Hat sich bedankt: 74 Mal
Danksagung erhalten: 192 Mal
DeepCore hat geschrieben:
AlCalzone hat geschrieben:
VSCode. Wenn das einmal ordentlich eingerichtet ist, gibts nix einfacheres IMO. Git-Integration, optional Type-Checking, etc...
Könntest Du mal Deine Einrichtung erläutern?

Konsole und Git sind ja von Haus aus drin. Mag zwar nicht jeder, aber ich bin damit einfach am schnellsten.
Installierte Erweiterungen:
- Auto Close Tag (für HTML/React)
- Bookmarks
- Coverage Gutters + Run on Save (Automatische Test-Coverage-Anzeige wenn package.json entsprechend konfiguriert ist)
- ESLint (JS-Datei-Prüfung)
- TSLint (TypeScript-Datei-Prüfung auf stilistische und typische Syntax-Fehler)

TypeChecking erfordert eine entsprechend konfigurierte tsconfig.json-Datei im Projektordner, siehe https://github.com/ioBroker/ioBroker.cl ... onfig.json oder https://github.com/AlCalzone/ioBroker.t ... onfig.json und "typescript" als devDependency. Dann meckert VSCode beim Öffnen von Dateien, wenn es Fehler findet, die über einfache Fehler wie ( vergessen hinausgehen.

Für Adapter-Aktualisierung auf dem Zielhost hab ich auch ein kleines Skript.
package.json => scripts:
Code:
"deploy_local": "node --require ts-node/register maintenance/deploy_local.ts",

maintenance/deploy_local.ts sieht so aus:
Spoiler: Show hidden text
Code:
// tslint:disable:no-var-requires
/*
   Allows easier local debugging over SSH.
   Running `npm run deploy_local` updates remote adapter files
   and restarts the instance
*/

/*
   CONFIGURATION:
      - provide a deploy_password.json file in the local dir with contents
         {
            "host": "<HOSTNAME>",
            "username": "<USERNAME>",
            "password": "<PASSWORD>"
         }
      - specify which dirs and files should be uploaded
      - specify where the root dir is relative to this script
*/
const uploadDirs = ["admin", "build"];
const uploadFiles = ["package.json", "io-package.json", "main.js"];
const rootDir = "../";

// =========================
// CAN'T TOUCH THIS
// =========================

import * as nodeSSH from "node-ssh";
import * as path from "path";

const localRoot = path.resolve(__dirname, rootDir);

const ioPack = require(path.join(rootDir, "io-package.json"));
const ADAPTER_NAME = ioPack.common.name;

const ssh = new nodeSSH();
const sshConfig = require(path.join(__dirname, "deploy_password.json"));

const remoteRoot = `/opt/iobroker/node_modules/iobroker.${ADAPTER_NAME}`;

(async function main() {
   await ssh.connect(sshConfig);

   for (const dir of uploadDirs) {
      console.log(`cleaning ${dir} dir...`);
      await ssh.execCommand(`rm -rf ${path.join(remoteRoot, dir)}`);
      console.log(`uploading ${dir} dir...`);
      try {
         await ssh.putDirectory(path.join(localRoot, dir), path.join(remoteRoot, dir), {
            recursive: true,
            concurrency: 10,
            validate: (pathname) => {
               const basename = path.basename(pathname);
               if (basename.startsWith("deploy_")) return false;
               if (basename.endsWith("Thumbs.db")) return false;
               if (basename.endsWith(".map") && basename.indexOf(".bundle.") === -1) return false;
               if (basename.indexOf(".test.") > -1) return false;
               if (basename === "src") return false;
               return true;
            },
         });
      } catch (e) {
         console.error(e);
      }
   }
   for (const file of uploadFiles) {
      console.log(`uploading ${file}...`);
      await ssh.putFile(path.join(localRoot, file), path.join(remoteRoot, file));
   }

   // update in-mem adapter
   let execResult;
   console.log("updating in-mem adapter");
   execResult = await ssh.execCommand(`iobroker upload ${ADAPTER_NAME}`);
   console.log(execResult.stdout);
   console.log(execResult.stderr);
   if (process.argv.indexOf("--norestart") === -1) {
      execResult = await ssh.execCommand(`iobroker restart ${ADAPTER_NAME}`);
      console.log(execResult.stdout);
      console.log(execResult.stderr);
   }

   console.log("done");
   process.exit(0);
})();

und erfordert in package.json
Code:
"devDependencies": {
    "node-ssh": "^5.0.0",
    "ts-node": "^4.1.0",
    "typescript": "^2.6.2",
}

Wenn das Skript konfiguriert ist (siehe Kommentare am Skript-Anfang), reicht ein "npm run deploy_local" und die aktualisierten Adapterdateien werden per SSH auf dem Zielhost hochgeladen und der Adapter dort aktualisiert/neu gestartet.
Für dein Vorhaben musst du vermutlich vorher noch 1-2 Skripte lokal ausführen, um die Übersetzungsdateien umzuwandeln.

_________________
Meine Adapter:
IKEA Trådfri: GitHub | Test & Hilfe
G-Homa: GitHub | Test & Hilfe


Nach oben
   
BeitragVerfasst: 13.01.2018, 21:29 
Offline
starter

Registriert: 19.06.2017, 16:11
Beiträge: 23
AlCalzone hat geschrieben:
DeepCore hat geschrieben:
AlCalzone hat geschrieben:
VSCode. Wenn das einmal ordentlich eingerichtet ist, gibts nix einfacheres IMO. Git-Integration, optional Type-Checking, etc...
Könntest Du mal Deine Einrichtung erläutern?

Konsole und Git sind ja von Haus aus drin. Mag zwar nicht jeder, aber ich bin damit einfach am schnellsten.
Installierte Erweiterungen:
- Auto Close Tag (für HTML/React)
- Bookmarks
- Coverage Gutters + Run on Save (Automatische Test-Coverage-Anzeige wenn package.json entsprechend konfiguriert ist)
- ESLint (JS-Datei-Prüfung)
- TSLint (TypeScript-Datei-Prüfung auf stilistische und typische Syntax-Fehler)

TypeChecking erfordert eine entsprechend konfigurierte tsconfig.json-Datei im Projektordner, siehe https://github.com/ioBroker/ioBroker.cl ... onfig.json oder https://github.com/AlCalzone/ioBroker.t ... onfig.json und "typescript" als devDependency. Dann meckert VSCode beim Öffnen von Dateien, wenn es Fehler findet, die über einfache Fehler wie ( vergessen hinausgehen.

Für Adapter-Aktualisierung auf dem Zielhost hab ich auch ein kleines Skript.
package.json => scripts:
Code:
"deploy_local": "node --require ts-node/register maintenance/deploy_local.ts",

maintenance/deploy_local.ts sieht so aus:
Spoiler: Show hidden text
Code:
// tslint:disable:no-var-requires
/*
   Allows easier local debugging over SSH.
   Running `npm run deploy_local` updates remote adapter files
   and restarts the instance
*/

/*
   CONFIGURATION:
      - provide a deploy_password.json file in the local dir with contents
         {
            "host": "<HOSTNAME>",
            "username": "<USERNAME>",
            "password": "<PASSWORD>"
         }
      - specify which dirs and files should be uploaded
      - specify where the root dir is relative to this script
*/
const uploadDirs = ["admin", "build"];
const uploadFiles = ["package.json", "io-package.json", "main.js"];
const rootDir = "../";

// =========================
// CAN&#39;T TOUCH THIS
// =========================

import * as nodeSSH from "node-ssh";
import * as path from "path";

const localRoot = path.resolve(__dirname, rootDir);

const ioPack = require(path.join(rootDir, "io-package.json"));
const ADAPTER_NAME = ioPack.common.name;

const ssh = new nodeSSH();
const sshConfig = require(path.join(__dirname, "deploy_password.json"));

const remoteRoot = `/opt/iobroker/node_modules/iobroker.${ADAPTER_NAME}`;

(async function main() {
   await ssh.connect(sshConfig);

   for (const dir of uploadDirs) {
      console.log(`cleaning ${dir} dir...`);
      await ssh.execCommand(`rm -rf ${path.join(remoteRoot, dir)}`);
      console.log(`uploading ${dir} dir...`);
      try {
         await ssh.putDirectory(path.join(localRoot, dir), path.join(remoteRoot, dir), {
            recursive: true,
            concurrency: 10,
            validate: (pathname) => {
               const basename = path.basename(pathname);
               if (basename.startsWith("deploy_")) return false;
               if (basename.endsWith("Thumbs.db")) return false;
               if (basename.endsWith(".map") && basename.indexOf(".bundle.") === -1) return false;
               if (basename.indexOf(".test.") > -1) return false;
               if (basename === "src") return false;
               return true;
            },
         });
      } catch (e) {
         console.error(e);
      }
   }
   for (const file of uploadFiles) {
      console.log(`uploading ${file}...`);
      await ssh.putFile(path.join(localRoot, file), path.join(remoteRoot, file));
   }

   // update in-mem adapter
   let execResult;
   console.log("updating in-mem adapter");
   execResult = await ssh.execCommand(`iobroker upload ${ADAPTER_NAME}`);
   console.log(execResult.stdout);
   console.log(execResult.stderr);
   if (process.argv.indexOf("--norestart") === -1) {
      execResult = await ssh.execCommand(`iobroker restart ${ADAPTER_NAME}`);
      console.log(execResult.stdout);
      console.log(execResult.stderr);
   }

   console.log("done");
   process.exit(0);
})();

und erfordert in package.json
Code:
"devDependencies": {
    "node-ssh": "^5.0.0",
    "ts-node": "^4.1.0",
    "typescript": "^2.6.2",
}

Wenn das Skript konfiguriert ist (siehe Kommentare am Skript-Anfang), reicht ein "npm run deploy_local" und die aktualisierten Adapterdateien werden per SSH auf dem Zielhost hochgeladen und der Adapter dort aktualisiert/neu gestartet.
Für dein Vorhaben musst du vermutlich vorher noch 1-2 Skripte lokal ausführen, um die Übersetzungsdateien umzuwandeln.
Wau danke werde mir das morgen Mal anschauen


Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu Forum:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de