NEWS
ROCK64 - Pine64
-
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
-
Sorry nächstes mal kommt es als Text. Erst nach dem Fehler ist die Instanz doppelt vorhanden. Ein reboot hat erstmal geholfen, aber ist vermutlich nur ne Frage der Zeit bis der Fehler wieder erscheint und er wieder doppelt läuft. Ich beobachte das mal.
Ein neues Image wäre prima. Welchen Grund hat es eigentlich das sich der Root nicht anmelden kann? So als Linuxlaie weiß ich gleich gar nicht wie ich das freischalten kann. Muss ich mal googeln ;).
Aber ansonsten finde ich die Performance genial im Gegensatz zum RPi. Danke für deine Unterstützung.
vg
Falk