NEWS
ROCK64 - Pine64
-
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
-
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. `
Dann ist aber wahrscheinlich ein Skript daran schuld.Welchen Grund hat es eigentlich das sich der Root nicht anmelden kann? `
@Homoran:aus Sicherheitsgründen keinen Zugriff als root `
So als Linuxlaie weiß ich gleich gar nicht wie ich das freischalten kann. Muss ich mal googeln . `
Darum ganz vorsichtig formuliert:
@Homoran:Wenn du weißt was du tust, `
Gruß
Rainer
-
> Dann ist aber wahrscheinlich ein Skript daran schuld.
Die Vermutung habe ich jetzt auch, da dieser Fehler ca. alle 14 Minuten auftritt. Müsste nicht im Log vor dem Fehler stehen welches Skript gestartet wurde?Stutzig macht es mich dabei nur, dass dieser Fehler auf meinem Echt-System einem RPi3 nicht auftritt… (ioBroker Versionen sind identisch)
Kann es eventuell auch ein Adapter sein, da ich auf dem Rock64 noch Broadlink2 und Amazon Dash zusätzlich installiert habe?
vg
Falk
-
Es lag an einem fehlerhaften Skript :oops: . Läuft seitdem stabil und schnell. Habe derzeit 0 Probleme. Super Arbeit. Jetzt heißt es einen 2. ordern als Ersatz
Auch hier sollte ich mal ein aktuelles auf Armbian basierendes Image machen. `
Wäre prima wenn es bald ein neues Image geben könnte ohne der Einschränkung des Root-Zugriffes. Ansonsten Top Arbeit. Danke dir.VG
Falk
-
Mal ne Frage an die Rock64 Besitzer.
Hat schon jemand das Dingen am Monitor dran und eine Gui Oberfläche mit Firefox oder so ausprobiert um auf die VIS zu kommen?
Der Pi3 sowie der OPI lahmen ein wenig, wenn der Browser läuft.
Also kurz gesagt, alles auf einem System.
Gruß
-
@ple:Mal ne Frage an die Rock64 Besitzer.
Hat schon jemand das Dingen am Monitor dran und eine Gui Oberfläche mit Firefox oder so ausprobiert um auf die VIS zu kommen?
Der Pi3 sowie der OPI lahmen ein wenig, wenn der Browser läuft.
Also kurz gesagt, alles auf einem System.
Gruß `
Leider nein nutze ihn nur als iobroker Server mit Zugriff per SSH ohne Monitor. -
Hallo zusammen,
ich habe den Rock64 seit einigen Wochen erfolgreich laufen. Ich bin äußerst zufrieden!
Ab jetzt wird es Offtopic, aber ich hoffe, ihr möchtet mir dennoch helfen:
Gerade kämpfe ich mich bei einem Linux-Basic ab, bei dem ich mir nicht erklären kann, warum es so ist:
Mounten einer Freigabe meines QNAP-NAS:
Raspberry 1B mit raspbian auf Debian Jessy:
sudo mount -t cifs //192.168.55.10/homes/Bene ~/nas -o user=Bene Password for Bene@//192.168.55.10/homes/Bene: ********
Die Freigabe wird korrekt gemountet!
Rock64 mit ayufan-Image auf Basis Debian Jessy:
sudo mount -t cifs //192.168.55.10/homes/Bene ~/nas -o user=Bene mount: wrong fs type, bad option, bad superblock on //192.168.55.10/homes/Bene, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount. <type>helper program) In some cases useful info is found in syslog - try dmesg | tail or so.</type>
Ich raffe einfach nicht, warum mit gleichem Aufruf bei gleichem BS unterschiedliche Ergebnisse rumkommen…
Könnt ihr mich aufklären?
Viele Grüße
Bene
-
Moin.
Also mein rock64 läuft seit ner Woche, ich bin super zufrieden.
Ich habe auch eine 32 GB emmc dran gebaut aber bislang noch nicht genutzt. Mein System läuft prima per SD-Karte.
Wie kriege ich das jetzt rüberkopiert? Ich habe auch schon viel gelesen, verstehe es aber leider nicht.
Brauche ich unbedingt einen "Jumper"?
Wenn ich "nand-sata-install" ausführe, gibt es den Befehl nicht..
Ich habe den sketch für den rock64 drauf von der iO Seite.
Kann mir hier einer leicht verständlich helfen
Gruß
ebu
-
@ebu:Kann mir hier einer leicht verständlich helfen `
Leider nein.Denn, wenn du mit:
@ebu:den sketch für den rock64 drauf von der iO Seite. `
meinst dass du das ioBroker Image von der Website drauf hsat, dann ist das noch mit dem Ayufan Image gebaut, da gibt es das NAND-SATA-install nicht.Inzwischen ist aber das armbian so weit, dass ich damit mal ein Image machen könnte. Da geht das dann.
Gruß
Rainer
…oder selber mit armbian installieren