NEWS
Anwesenheit im multihost läuft nicht!
-
Hallo zusammen,
ich habe folgendes Problem:
ich wollte mir eine Anwesenheitskennung nach http://forum.iobroker.net/viewtopic.php … 266#p28266
nachbauen.
Auf einem Singlehost läuft der einwandfrei. Leider wird nicht die ganze Wohnung abgedeckt. Deshalb wollte ich mir ein Multihost-System aufbauen.
ich habe versucht, die Image auf eine SD-Karte zu flashen, um den Raspberry als Slave einzubinden.
Erst habe ich alle Instanzen außer admin gelöscht, es wurden nur die G-Tags am Master erkannt.
Dann habe ich den Slave vom System genommen, javascript installiert und die 2 Skripte eingetragen. In der Konfig natürlich auch noble.
danach habe ich den 2. Raspberry wieder als Slave eingebunden.
Es wurden nur die G-Tags am Master erkannt.
Erschwerend kam jetzt noch dazu, dass ich meinen NUC zerschossen habe. Das heißt, er wird weder im Putty noch sonstwo erkannt. Ein Netzwerkscanner
brachte auch keinen Erfolg. Deshalb habe ich diese Multihost-Umgebung mit 2 Raspberries nachgebaut. jedoch auch ohne wirklichen Erfolg.
Gruß,
Mathias
-
Ich möchte Ihnen für Ihre Bemühungen danken, diesen Artikel zu schreiben
-
Moin Mathias,
Dann habe ich den Slave vom System genommen, javascript installiert und die 2 Skripte eingetragen. In der Konfig natürlich auch noble.
danach habe ich den 2. Raspberry wieder als Slave eingebunden. `
wenn Du das tatsächlich so gemacht hast, kann es auch nicht gehen.Du musste den zweiten Raspi neu aufsetzen und dann als Slave ins System bringen. Auf dem Slave selber dürfen keine Adapter instanziert werden!
Wenn der zweite Raspi als Slave erkannt wird (im Reiter Hosts grün gekennzeichnet zu sehen ist), machst Du über den Reiter "Adpater" im Admin eine neue JavaScript-Instanz, die Du auf den Slave legst.
Im JavaScript-Adapter kannst DU dann bei jedem Script festlegen, auf welcher Instanz das Script laufen soll.
Gruß,
Eric
-
dann bin ich ja mal gespannt.
das werde ich gleich mal testen.
Der Slave ist ja noch aufgesetzt.
ich werde dann mal beim "Slave" Javascript löschen incl der Skripte und nochmals versuchen.
Ach ja, es ging auch nicht, als ich keinen Adapter installiert hatte. Deshalb habe ich es anders versucht.
Kann ich die Skripte auf beide Instanzen laufen lassen?
das wäre die Voraussetzung, um die kpl. Wohnung abzudecken.
Gruß,
Mathias
-
Hi
Kann ich die Skripte auf beide Instanzen laufen lassen?
das wäre die Voraussetzung, um die kpl. Wohnung abzudecken. `
Nein, ein Script kann immer nur einer Instanz zugewiesen werden - Du benötigst also 2 (identische, aber anders benannte) Scripte.Was Du aber machen kannst (wenn ich nicht irre) ist, das zweite Script in die Datenpunkte des ersten schreiben zu lassen. Wie das geht, bin ich momentan überfragt - da gibt es fähigere JavaScript-Leute hier
Gruß,
Eric
-
cool!
jetzt habe ich den global-script dem Slave zugewiesen.
Nun habe ich keinen Zugriff mehr auf die Seite des masters.
nach einem Neustart von iobroker hat es dann doch geklappt!
Dankeschön. Jetzt läuft es!
-
Hi,
@MathiasJ:jetzt habe ich den global-script dem Slave zugewiesen. `
welches Script hatest Du im Global-Bereich liegen?Da sollten eigentlich keine normalen Scripte liegen, sondern nur globale Funktionsblöcke, die von allen anderen Scripten genutzt werden (automatisch).
Nun habe ich keinen Zugriff mehr auf die Seite des masters `
Die Verschiebung eine Java-Scriptes auf eine andere Javascript-Instanz kann keinen Ausfall des Admins erzeugen.Es sei denn, Dein oben genanntes Global-Script verursacht da was.
Gruß,
Eric
-
ich habe den global-script 1:1 von http://forum.iobroker.net/viewtopic.php … 266#p28266 übernommen.
Aber egal! ich habe iobroker neu gestrartet und nun läuft's.
Gruß,
Mathias
-
Hi Mathias,
ich habe den global-script 1:1 von http://forum.iobroker.net/viewtopic.php … 266#p28266 übernommen. `
solche Komplett-Scipte gehören nicht in den Global-Teil. Was da drin steht, wird in jedes Script, was nicht im Global liegt, automatisch mit eingebaut.Somit hast Du das BT-Script in jeder Deiner anderen Scripte "eingebaut".
Gruß,
Eric
-
danke für die Info!
da ich aber in Sachen Java bzw Javascript eine totale null bin, muß ich glauben was man mir so vorsetzt.
Es sind da 2 Scripte:
den 1.4.3ble und den folgenden:
// globale Funktion: logs(logtext,level,color) // Version: 0.1.1 // Beschreibung: Ermöglicht innerhalb eines Javascript-Scripts unterschiedliche Loglevel // Benutzung, wie log() mit der zusätzlichen Option die Ausgabefarbe zu überschreiben // Übergabeparameter: logtext der Text, der als Log ausgegeben werden soll // level [optional] der Loglevel der Meldung als String // der level (mögliche Werte definiert in JSON loglevels), in dem der Text ausgegeben werden soll // color [optional] die html-Farbe der Meldung als String, siehe z.B.: http://tomheller.de/theholycymbal/html-farben.html // "none" -> es wird die Standardfarbe von log() im Level Info ausgegebn. // nichts angegeben -> es werden die Farben ais dem JSON loglevels je nach level ausgegeben // html-Farbe übergeben -> es wird die übergebenen Farbe ausgegeben // Rückgabe: Gibt den aktuellen Loglevel für diesen Aufruf zurück. // Gültiger level beim Aufruf -> der im Script definierte Loglevel wird zurückgegeben // kein Level angegeben -> es wird der Level "info" verwendet und zurückgegeben // ungültiger Level -> es wird der Level "info" verwendet und zurückgegeben // Infos: Benötigt im Javascript, welches die Funktion logs() verwendet // die Variabele loglevel, z.B. var loglevel = "info"; // // 0.1.1 Default Loglevel ergänzt // ----------------------------------------------------------------------------- // globale Scripte werden vor dem eigentlichen Script als Text reinkopiert // daher kann im globalen Script eine Variable einen Defaultwert enthalten var loglevel = 'info'; // Default Loglevel, wenn der Loglevel im aufrufenden Script nicht definiert ist // ----------------------------------------------------------------------------- // Script Log - logs() - ANFANG // ----------------------------------------------------------------------------- var loglevels = { "debug2": {"level": -2, "leveltext":"debug2: ", "color": "blue"}, "debug1": {"level": -1, "leveltext":"debug1: ", "color": "mediumblue"}, "debug": {"level": 0, "leveltext":"debug0: ", "color": "darkblue"}, "debug0": {"level": 0, "leveltext":"debug0: ", "color": "mediumblue"}, "info": {"level": 10, "leveltext":"", "color": "none"}, "warn": {"level": 20, "leveltext":"warn: ", "color": "darkorange"}, "error": {"level": 30, "leveltext":"error:", "color": "darkred"} }; function logs (logtext,level,color) { // in der Funktion den gesetzten Level überprüfen if (typeof level == 'undefined') {level = 'info'} if (level in loglevels) {} else { log("ungültiger loglevel **" + level + "** in Funktion logs() im Script","warn"); log("loglevel für das Script auf Stufe: " + loglevel + " gesetzt.","warn"); level = 'info'; loglevel = level; } // den im Script konfigurierten Loglevel prüfen // zum Scriptstart muss die Variable loglevel deklariert werden // z.B.: // var loglevel = "warn"; if (typeof loglevel == 'undefined') {loglevel = 'info'} if (loglevel in loglevels) {} else { var loglevelError = loglevel; loglevel = 'info'; // Loglevel auf Info stellen, wenn kein gültiger Loglevel im Script deklariert ist log("ungültiger loglevel für logs() in der Konfiguration im Script","error"); log("variable loglevel am Anfang des Scripts einem gültigen Wert zuweisen","error"); log('im Script konfigurierter loglevel: ' + loglevelError + ' -> geändert in: ' + loglevel) + '',"warn"; } // Farbe ernitteln if (typeof color == 'undefined') {color = loglevels[level].color} // Log je nach eingestelltem Loglevel ausgeben var levelConf = loglevels[loglevel].level; var levelLogs = loglevels[level].level; if (levelLogs >= levelConf) { if (color == "none") { log(loglevels[level].leveltext + logtext); } else { log('' + loglevels[level].leveltext + logtext + ''); } } return loglevel; } // ----------------------------------------------------------------------------- // Script Log - logs() - ENDE // -----------------------------------------------------------------------------
ich habe den o.g. in's global geschrieben.
Nun läuft die Anwesenheitskennung.
Noch eine Frage:
Ich habe per Blocky für jede Person einen Anwesenheits-Script gebastelt.
Diese muß ich auch jeweils zwei mal schreiben? (einen für den Master einen für den Slave?)
Bevor ich das System in den produktiven Betrieb nehme, muß ich schauen, ob man das ganze ohne letsencrypt auch verschlüsseln kann.
Es soll ja nicht im öffentlichem Netz hängen.
Gruß,
Mathias
-
danke für die Info! `
Gerne.da ich aber in Sachen Java bzw Javascript eine totale null bin, muß ich glauben was man mir so vorsetzt. `
Das Thema mit Global und Common ist aber schon einige Male im Forum diskutiert worden.Aber jetzt weißt Du es ja
Ich habe per Blocky für jede Person einen Anwesenheits-Script gebastelt.
Diese muß ich auch jeweils zwei mal schreiben? (einen für den Master einen für den Slave?) `
Wenn Du die beiden Scripte so baust, das sie jeweils in nur einen Datenpunkt schreiben. brauchst Du auch nur ein Blockly-Script.Gruß,
Eric
-
Hi Eric,
ich habe meine letzte Antwort geändert.
Vllt ist es doch richtig. ich habe in der letzten Antwort den Script angehängt, der im global ist.
Gruß,
Mathias
-
Hi,
das Du nur das Log-Script in Global gestellt hast, hast Du bisher nicht geschrieben. Es war immer die Rede vom Script aus dem anderen Thread (also komplett).
Aber egal, läuft ja jetzt.
Gruß,
Eric