NEWS
ROCK64 - Pine64
-
BTT: Bin einen Schritt weiter.
Erneuter Versuch, diesmal ohne restore, hat auch nicht geklappt: NAND-SATA_INSTALL durchgeführt, dann alles weitere auf dem eMMC.
bis zur ioBroker installation keine Probleme, danach war der admin nicht erreichbar.
Alle Schritte aus "http://www.iobroker.net/docu/?page_id=3928&lang=de" durchgezogen und diesmal auch ein upload admin:
!
root@ioBroker-Rock64:/opt/iobroker# iobroker status iobroker is running ! root@ioBroker-Rock64:/opt/iobroker# iobroker upload admin got /opt/iobroker/node_modules/iobroker.admin/admin upload [2] admin.admin /opt/iobroker/node_modules/iobroker.admin/admin/words.js words.js application/javascript upload [1] admin.admin /opt/iobroker/node_modules/iobroker.admin/admin/index.html index.html text/html upload [0] admin.admin /opt/iobroker/node_modules/iobroker.admin/admin/admin.png admin.png image/png ! root@ioBroker-Rock64:/opt/iobroker# iobroker list instances system.adapter.admin.0 : admin - enabled, port: 8081, bind: 0.0.0.0, run as: admin system.adapter.discovery.0 : discovery - enabled ! root@ioBroker-Rock64:/opt/iobroker# ps -A | grep iobroker 1770 ? 00:00:06 iobroker.js-con ! root@ioBroker-Rock64:~# netstat -n -a -p TCP Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1770/iobroker.js-co tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 1770/iobroker.js-co ! root@ioBroker-Rock64:~# node -v v6.11.3 root@ioBroker-Rock64:~# npm -v 3.10.10 !
Alles ohne Erfolg. Beim netstat -n -a -p TCP fror jedoch putty jedoch schon wieder ein, die obige Meldung habe ich dann in der zweiten Session erhalten.
Nach der Fehlermeldung beim Befehl:
node node_modules/iobroker.admin/admin.js --logs module.js:471 throw err; ^ Error: Cannot find module '/root/node_modules/iobroker.admin/admin.js' at Function.Module._resolveFilename (module.js:469:15) at Function.Module._load (module.js:417:25) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:389:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:502:3
wollte ich über filezilla sehen, was mit dem angeblich fehlenden Modul auf sich hat, aber auch filezilla blieb dauernd beim einlesen der Verzeichnisse hängen.
Daraufhin habe ich alles neu gemacht (und dabei für eine Fehlereingrenzung den Fehler gemacht mehrere Faktoren zu verändern ).
-
aktuelles armbian heruntergeladen
-
auf 64GB SD-Karte geschrieben
-
eMMC durch Jumper deaktiviert
-
iobroker Installation komplett auf µSD-Karte durchgeführt
-
- alles funktioniert!
-
reboot
-
- nach drei sekunden Jumper entfernt
-
nand-sata-install ausgeführt
-
- klappt sogar von 64GB µSD auf 16GB eMMC!!!
-
reboot und µSD-Karte raus
-
ioBroker startet auch von eMMC!
-
per filezilla Verzeoichnis /opt/iobroker/backups angelegt
-
- letztes backup hereingeschoben
-
über Konsole iobroker stop und iobroker restore BackupName
-
iobroker start
-
- läuft immer noch!!
Im Moment werden die Instanzen nachinstalliert -> dauert nach bisherigen Erfahrungen eine gute Stunde.
Bis dann
Rainer
-
-
läuft im Moment stabil - mal sehen wie lange
Beim Screenshot war die CPU-Auslastung durch die Installation noch auf 24,4%. Das wird noch runtergehen. In den Bestzeiten lag sie unter 5%, im Moment bereits unter 20%. Der Wert unter /proc/stat ist ein Mittelwert über ??? und wird sehr langsam an die aktuelle Situation angepasst.Der Wert der über die Daten aus top ausgerechnet wir liegt gerade bei 2-3%!
Schön zu sehen ist hier auch der immer wieder verwechselte Unterschied zwischen MEM free und MEM available. Durch die ganzen Installationen war der ominöse freie Speicher auf 281MB gesunken, obwohl in Wirklichkeit noch 3049MB zur Verfügung stehen. (free steht aktuell bei 323 bei kaum geändertem available)
In der Tabelle rechts unten sieht man den Bedarf der einzelnen Prozesse. während der controller hier mit 5.7% Auslastung eines CPU-Kerns das Modul mit der höchsten CPU-Belastung ist, ist dies auf meinem Cubie wegen der langsameren I/O Vorgänge der history-Adapter mit ca. 20%! der hier gerade mal 1,5% benötigt.
Gruß
Rainer
-
Jetzt sitze ich vor meinem Pine64.
Welches OS sollte man nehmen? Im Moment habe ich ein debian drauf und boote von SD.
Wie komme ich an das emmc? Wie bekomme ich mein OS auf das emmc?
Vielen Dank
-
Wie bekomme ich mein OS auf das emmc? `
https://forum.pine64.org/showthread.php?tid=4924oder:
http://forum.iobroker.net/viewtopic.php … =80#p84462
Gruß
Rainer
-
Danke.
Den ersten Link lese ich dauernd und verstehe ihn nicht.
Was ist das mit Jumper stecken und wieder ziehen? Sonst stelle ich mich nicht so blöd an.
Das gleiche Problem werde ich doch bei Armbian auch haben?
-
Das gleiche Problem werde ich doch bei Armbian auch haben? `
Wie du das in dem oben verlinkten Beitag von mir gelesen hast, wirst du das bei dem ersten Versuch eben nicht haben.Bei weiteren schon, das habe ich ja später auch geschrieben.
Gruß
Rainer
-
läuft im Moment stabil - mal sehen wie lange
Rock64_revival.jpg
Beim Screenshot war die CPU-Auslastung durch die Installation noch auf 24,4%. Das wird noch runtergehen. In den Bestzeiten lag sie unter 5%, im Moment bereits unter 20%. Der Wert unter /proc/stat ist ein Mittelwert über ??? und wird sehr langsam an die aktuelle Situation angepasst.
Der Wert der über die Daten aus top ausgerechnet wir liegt gerade bei 2-3%!
Schön zu sehen ist hier auch der immer wieder verwechselte Unterschied zwischen MEM free und MEM available. Durch die ganzen Installationen war der ominöse freie Speicher auf 281MB gesunken, obwohl in Wirklichkeit noch 3049MB zur Verfügung stehen. (free steht aktuell bei 323 bei kaum geändertem available)
In der Tabelle rechts unten sieht man den Bedarf der einzelnen Prozesse. während der controller hier mit 5.7% Auslastung eines CPU-Kerns das Modul mit der höchsten CPU-Belastung ist, ist dies auf meinem Cubie wegen der langsameren I/O Vorgänge der history-Adapter mit ca. 20%! der hier gerade mal 1,5% benötigt.
Gruß
Rainer `
Hallo Rainer,
ich hab mal wieder ein paar Fragen
1.Wärst du so nett deine "Gauge-Widgets" zur Verfügung zu stellen?
2.Welche Datenpunkte nimmst du für das Diagram über den Speicherverbrauch der verschieden Adapter?
3.Welche Datenpunkte nimmst du für den Netzwerktraffic?
4.Könntest du auch die Tabelle mit den ioBroker-Prozessen zur Verfügung stellen.
Würde gern die Daten meines Rock64 auch Visualisieren.
Gruß
-
Hallo zusammen,
ich habe mir, nach den Berichten hier über die Platine, den Rock64 bestellt.
Ich bin gespannt, wie ich mich mit ihm anstelle. Vorher muss ich ihn aber erstmal bekommen.
Wie sind denn die Erfahrungen bezüglich der Lieferzeit. Ich habe schon was von 15-45 Tagen gelesen. Sollte das stimmen kann ich ja zwischen Mitte November und Ende Dezember mit dem Eintreffen rechnen…
Im Pine64-Forum habe ich eine Menge über die Installation auf eMMC gelesen. Insbesondere die Geschichte mit dem seriellen Kabel hat mich dabei immer wieder irritiert.
Sehe ich es richtig, dass (http://forum.iobroker.net/viewtopic.php?f=34&t=7019&start=80) die Installation über nand-sata-install funktioniert? Oder sollte ich bis zum Eintreffen des Rock64 noch mal einen USB-Seriell-Adapter ins Haus holen?
Irgendwie blicke ich da noch nicht ganz durch…
Kann man alternativ z.B. mit dem WinDiskImager direkt auf den eMMC schreiben, wenn man einen USB-eMMC-Adapter hat?
Vielen Dank für eure Hilfe!
Viele Grüße
Bene
-
Ich habe es mit einem neuen eMMC auch ohne irgendwelche Hilfsmittel mit nand-Sata-install geschafft.
Beim zweiten install klappt es tatsächlich nicht (so einfach).
Das kabel für die serielle konsole dient nur dazu den POST zu sehen, da dieser nicht auf HDMI ausgegeben wird.
Man muss auf jeden fall einen Jumper beim boot setzen und sobald er von der SD karte bootet diesen Jumper entfernen.
Das war mir zuviel Aufwand und ich habe mich auf gut glück an die Erfahrungen aus dem pine64 Forum gehalten: jumper stecken - strom an - 3 sec. Warten - Jumper weg!
Hat bei mir reproduziert geklappt.
Sinn des ganzen ist, dass beim Rock64 das eMMC bootvorrang hat. Bei gesetztem Jumper wird zwar von der SD karte gebootet, aber das eMMC nocht erkannt. Also muss man den Jumper für das booten setzen und danach sofort entfernen, damit auch das eMMC erkannt wird.
Lieferzeit beim ersten mal waren etwa 4 Wochen über Rotterdam, beim zweiten etwa drei Tage über Leipzig, wobei DHL express aber zusätzlich zur Einfuhrumsatzsteuer nochmal etwa 15€ "Kapitalauslagegebühren" erhoben hat
Gruß
Rainer
-
Es war nicht vergessen, nur jetzt endlich komme ich von meinem PC wieder ins Internet.
Ich hoffe, dass ich jetzt alles beantworten kann:
@Smartuser:Wärst du so nett deine "Gauge-Widgets" zur Verfügung zu stellen? `
s.u.Welche Datenpunkte nimmst du `
erst mal allgemein:
hier der komplette view:
! ````
passte leider nicht, daher als Anhang!Da sind einige gerechnete Daten drin, bei Bedarf bitte nach den Skripts/Blockly fragen. z.B. ~~@Smartuser:~~ > 3.Welche Datenpunkte nimmst du für den Netzwerktraffic? ` Blockly: >! ```` <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="xrbmvIO/PN;%/.YQdjWG" x="87" y="38"><mutation items="1"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id="F{:[`LHAmM~=mf}G3e05"><field name="oid">rpi2.0.network.net_received</field></shadow></value> <statement name="STATEMENT"><block type="update" id="qT5NPeQr(uS|8Qnsbs+B"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.CubieNetReceived</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="math_arithmetic" id=":qLnK-H].8qXH.G3`U/O"><field name="OP">DIVIDE</field> <value name="A"><shadow type="math_number" id="o^|%^oXo(TWM*46xqtm8"><field name="NUM">1</field></shadow> <block type="math_arithmetic" id="{NZTMK@UQ]dKVdEkLb*)"><field name="OP">MINUS</field> <value name="A"><shadow type="math_number" id="{V(@*RwUGQkn;Q5oOjuZ"><field name="NUM">1</field></shadow> <block type="get_value" id="bX)m08(.JE%L~L52CKNz"><field name="ATTR">val</field> <field name="OID">rpi2.0.network.net_received</field></block></value> <value name="B"><shadow type="math_number" id="rKc{A(_PHQLo)znlgc+s"><field name="NUM">8192</field></shadow> <block type="get_value" id="CicpnUOm3we4(4ialV#R"><field name="ATTR">val</field> <field name="OID">javascript.0.CubieNetReceived_old</field></block></value></block></value> <value name="B"><shadow type="math_number" id="4XzpbA2:JR=[V-cvo1?K"><field name="NUM">-61440</field></shadow></value></block></value> <next><block type="update" id="GjM0fc^BM32;#Rk?}3QQ"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.CubieNetTransmit</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="math_arithmetic" id="JKVM~;-@4,4yUDwJD!lo"><field name="OP">DIVIDE</field> <value name="A"><shadow type="math_number" id="o^|%^oXo(TWM*46xqtm8"><field name="NUM">1</field></shadow> <block type="math_arithmetic" id="q,q|I1z+:UK#.tZ!681j"><field name="OP">MINUS</field> <value name="A"><shadow type="math_number" id="{V(@*RwUGQkn;Q5oOjuZ"><field name="NUM">1</field></shadow> <block type="get_value" id="L3OqohqV!yS2V7.4dy~P"><field name="ATTR">val</field> <field name="OID">rpi2.0.network.net_send</field></block></value> <value name="B"><shadow type="math_number" id="rKc{A(_PHQLo)znlgc+s"><field name="NUM">8192</field></shadow> <block type="get_value" id="gHq.R#.u7}LE1x+)*[mV"><field name="ATTR">val</field> <field name="OID">javascript.0.CubieNetTransmit_old</field></block></value></block></value> <value name="B"><shadow type="math_number" id="Km^xL8;y*,N5ojOD^kTs"><field name="NUM">61440</field></shadow></value></block></value> <next><block type="update" id="0?+[Al#HE,.y)`WT-U{l"><mutation delay_input="true"></mutation> <field name="OID">javascript.0.CubieNetReceived_old</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">1000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="get_value" id="2#RNYI_]bR}O1-1@*n!`"><field name="ATTR">val</field> <field name="OID">rpi2.0.network.net_received</field></block></value> <next><block type="update" id="8;6j447ey??oUT)y8A27"><mutation delay_input="true"></mutation> <field name="OID">javascript.0.CubieNetTransmit_old</field> <field name="WITH_DELAY">TRUE</field> <field name="DELAY_MS">1000</field> <field name="UNIT">ms</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="VALUE"><block type="get_value" id="Wx0Ix3So2{ya^C]tz(Rb"><field name="ATTR">val</field> <field name="OID">rpi2.0.network.net_send</field></block></value></block></next></block></next></block></next></block></statement></block></xml>
Ich hoffe das war erstmal alles.
Gruß
Rainer
-
Und das skript zu den Prozessen von Ruhr70
! ```
`var pfad = "Systeminfos.ioBroker.Prozesse" + "."; // Pfad in dem die Datenpunkte angelegt werden
! // Datenpunktnamen:
var idProzesse = pfad + 'ioBroker_Prozesse';
var idMemAll = pfad + 'ioBroker_Speicher_gesamt';
var idAnzProzesse = pfad + 'ioBroker_Anzahl_Prozesse';
var idCpuAll = pfad + 'ioBroker_CPU_Gesamt';
var idMemPercent = pfad + 'ioBroker_Speicher_prozentual';
var idInstanzenEinmal = pfad + 'ioBroker_Instanzen_einmal_aktiv';
! // regelmässige Wiederholungen der Abfrage
var cronStr = "*/2 * * * ";
! var abfrage = 'ps -A aux --sort -pcpu | grep " [i]o."';
! // -----------------------------------------------------------------------------
! createState(idProzesse, "", {
name: 'ioBroker laufende Prozesse Objekt',
desc: 'ioBroker laufende Prozesse Objekt, Speicherverbrauch',
type: 'string',
unit: '',
role: 'object'
});
! createState(idMemAll, 0, {
name: 'ioBroker Speicherverbrauch gesamt',
desc: 'ioBroker Speicherverbrauch gesamt (RSS)',
type: 'number',
unit: 'MB',
role: 'value'
});
! createState(idAnzProzesse, 0, {
name: 'ioBroker Anzahl Prozesse',
desc: 'ioBroker Anzahl aktiver Prozesse',
type: 'number',
unit: '',
role: 'value'
});
! createState(idCpuAll, 0.0, {
name: 'ioBroker CPU-Last gesamt',
desc: 'ioBroker CPU-Last gesamt',
type: 'number',
unit: '%',
role: 'value'
});
! createState(idMemPercent, 0.0, {
name: 'Speicherverbrauch prozentual',
desc: 'Speicherverbrauch prozentual',
type: 'number',
unit: '%',
role: 'value'
});
! createState(idInstanzenEinmal, true, {
name: 'keine Instanzen doppelt aktiv',
desc: 'jeder aktive ioBroker Prozess ist nur einmal aktiv',
type: 'boolean',
unit: '',
role: 'value'
});
! // -----------------------------------------------------------------------------
! function doppelteProzesse(arr) {
var mehrfacheProzesse = [];
var anzProzesse = (arr.length);
var anzProzessAktiv = 0;
for (var i = 0; i < anzProzesse; i++) {
if (mehrfacheProzesse.indexOf(arr[i].command) == -1) {
anzProzessAktiv = zaehleProzesse(arr,arr[i].command);
if (anzProzessAktiv > 1) {
log("Prozess: " + arr[i].command+", mehrfach aktiv: " + anzProzessAktiv +" mal","warn");
mehrfacheProzesse.push(arr[i].command);
mehrfacheProzesse.push(anzProzessAktiv);
}
}
}
return mehrfacheProzesse;
}
! function zaehleProzesse(arr,command) {
var count = 0;
var anzProzesse = (arr.length);
for (var i = 0; i < anzProzesse; i++) {
if(arr[i].command === command) {
count++;
}
}
return count;
}
! function writeJson(json) {
return JSON.stringify(json); // JSON in String umwandeln, damit das JSON in einem Datenpunkt geschrieben werden kann
}
! function getMemAbsolut(json) {
var anzProzesse = (json.length);
var mem = 0;
for (var i = 0; i < anzProzesse; i++) {
mem = mem + json[i].rss;
}
return mem;
}function getCpu(json) {
var anzProzesse = (json.length);
var cpu = 0.0;
for (var i = 0; i < anzProzesse; i++) {
cpu = cpu + json[i].cpu;
}
return cpu;
}! function getMem(json) {
var anzProzesse = (json.length);
var mem = 0.0;
for (var i = 0; i < anzProzesse; i++) {
mem = mem + json[i].mem;
}
return mem;
}
! function createArrayJson(arr) {
var jsonArr = [];
var anzDP = 11; // Anzahl Datenreihen in der Abfrage
var anzProzesse = (arr.length-1)/anzDP;
! for (var i = 0; i < anzProzesse; i++) {
jsonArr.push({
command: arr[10 + ianzDP], // ioBroker Prozess (COMMAND = Kommando, mit dem der Prozess gestartet wurde)
pid: arr[ 1 + ianzDP], // Prozess ID
cpu: parseFloat(arr[ 2 + ianzDP]), // aktueller CPU-Last in %
mem: parseFloat(arr[ 3 + ianzDP]), // aktueller Verbrauch physikalischer Speicher %
vmem: parseInt(arr[ 4 + ianzDP]), //
rss: parseInt(arr[ 5 + ianzDP]), // physikalische Speichernutzung
start: arr[ 8 + ianzDP], // Startzeitpunkt des Prozesses
time: arr[ 9 + ianzDP] // bisher verbrauchte CPU Zeit
});
}
return jsonArr;
}
! function abfrageConsole() {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
log(err,"error");
return;
}
stdout = stdout.replace(/\n+/g, " "); // neue Zeile gegen Leerzeichen ersetzen
stdout = stdout.split(/ +/g); // array erstellen, Lerzeichen als Trennervar anzProzesse = (stdout.length-1) / 11; //log(stdout); //log("Anzahl laufender ioBroker Prozesse: " + anzProzesse); var jsonArr = createArrayJson(stdout); var mem = Math.floor(getMemAbsolut(jsonArr)/1024); var cpu = Math.floor(getCpu(jsonArr)*10)/10; var memPercent = Math.floor(getMem(jsonArr)*10)/10;
! var doppeltArr = doppelteProzesse(jsonArr);
if(doppeltArr.length === 0) { setState(idInstanzenEinmal,true); } else { setState(idInstanzenEinmal,false); }
! setState(idProzesse ,writeJson(jsonArr));
setState(idMemAll ,mem);
setState(idAnzProzesse ,anzProzesse);
setState(idCpuAll ,cpu);
setState(idMemPercent ,memPercent);
});
}
! function abfragen() {
abfrageConsole();
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, abfragen);
! // main
// -----------------------------------------------------------------------------
function main() {
abfragen();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! setTimeout(main, 500);`
! Gruß
! Rainer[/i][/i][/i][/i][/i][/i][/i][/i][/i] -
Und das skript zu den Prozessen von Ruhr70 `
Und was macht das Skript, wenn ich so quer reinfragen darf? -
Und was macht das Skript, wenn ich so quer reinfragen darf? `
Bei dir drücke ich da mal ein Auge zuDas Skript liest die Prozessornutzung der einzelnen ioBroker Instanzen und des js-controllers aus.
Gruß
Rainer
-
vielen Dank; ist das prozessorabhängig, oder liefe das auch auf meinem Orange Pi?
-
Muss zumindest auf allen Linux Installationen laufen.
Bis das Gegenteil bewiesen ist
Gruß
Rainer
-
prima, dann teste ich das mal aus…
-
Es war nicht vergessen, nur jetzt endlich komme ich von meinem PC wieder ins Internet.
Ich hoffe, dass ich jetzt alles beantworten kann: `
Super!Dankeschön, ich komm diese Woche leider nicht zum testen.
Aber sobald ich testen konnte, geb ich Rückmeldung!
Danke nochmal!
Gruß
-
Hi,
habe heute meinen Rock64 in Betrieb genommen und es klappt auch schon sehr gut. Danke für das Image. Super Arbeit.
vg
Falk
-
Hi,
so ganz rund läuft es irgendwie noch nicht. Der javascript Prozess (mit dewpoint,suncalc,xml2js) startet mehrmals nach folgenden Fehlermeldungen:
!
!
Ebenfalls ist mir unklar wie die Backup-Skripts (ioBroker Back-UP Linux Version von Looxer01) laufen sollen, wenn das nur per sudo funktioniert in der shell nach Passworteingabe.Gibt es zusätzlich noch die Möglichkeit der Anzeige von Spannung(rpi2.0.raspberry.cpu_voltage) & CPU-Speicher(rpi2.0.raspberry.mem_arm) im Rock64?
Folgendes ist installiert:
Node-Version v6.12.0
NPM-Version v3.10.10
Admin v2.0.9
Eventuell hat jemand eine Idee.
vg
Falk
-
Im zweiten screenshot (code bitte als Text in Code-Tags!) sieht man das der javascript.0 Prozess 2x läuft!
Das könnte auch den ersten Fehler erklären, oder eine Folge desselben sein.
Bitte den Rock einmal rebooten.
Ebenfalls ist mir unklar wie die Backup-Skripts (ioBroker Back-UP Linux Version von Looxer01) laufen sollen, wenn das nur per sudo funktioniert in der shell nach Passworteingabe. `
Auch hier sollte ich mal ein aktuelles auf Armbian basierendes Image machen. Ich glaube, dass ich in diesem Image aus Sicherheitsgründen keinen Zugriff als root vorgesehen habe. Wenn du weißt was du tust, kannst du dir ja einen root-Zugriff freischalten.
Gruß
Rainer