NEWS
gibt es mittlerweile ein regex für ein result?
-
@mickym sagte in gibt es mittlerweile ein regex für ein result?:
Dann stell halt mal die Quelle oder was Du willst hier in CodeTags ein
gerne
Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 806M 5.3M 800M 1% /run /dev/mmcblk0p2 235G 59G 164G 27% / tmpfs 4.0G 0 4.0G 0% /dev/shm tmpfs 5.0M 48K 5.0M 1% /run/lock /dev/mmcblk0p1 510M 63M 448M 13% /boot/firmware /dev/sda1 137G 2.6G 127G 3% /media/usbplatte tmpfs 806M 0 806M 0% /run/user/1000
und daraus die Werte für die sda1
jetzt komm mir nicht mit JSONATA
EDIT:
Alternativ mit dem resultFilesystem 1M-blocks Used Available Use% Mounted on udev 3859 0 3859 0% /dev tmpfs 806 6 800 1% /run /dev/mmcblk0p2 239742 59801 167751 27% / tmpfs 4027 0 4027 0% /dev/shm tmpfs 5 1 5 1% /run/lock /dev/mmcblk0p1 510 63 448 13% /boot/firmware /dev/sda1 139752 2662 129920 3% /media/usbplatte tmpfs 806 0 806 0% /run/user/1000
-
@homoran habe mir was mit JS gebaut, das genau alle Daten holt. So mache ich es für Speicher und HDD Daten.
Ro75.
-
@ro75 sagte in gibt es mittlerweile ein regex für ein result?:
habe mir was mit JS gebaut
wenn ich js könnte, hätte ich das auch gemacht
Ich hab schon zu viele js-scripte, die ich nur marginal modifizieren kann.Wenn jetzt z.b. require durch axios ersetzt werden muss bin ich aufgeschmissen.
Will deshalb bei Blocly bleiben.@haus-automatisierung hat gerade so viel neues für Blockly gebastelt, da hatte ich gehofft dass auch ein regex Baustein für Texte dabei gewesen wäre
-
@homoran
schau es dir mal an:// Gesamt Speicher auslesen von Proxmox: PVE und speichern des Wertes function GB_pve_holen() { const { Client } = require('ssh2'); const conn = new Client(); conn.on('ready', () => { //log('Client :: ready'); conn.exec('free -m', function(err, stream) { if (err) throw err; stream.on('close', function(code, signal) { conn.end(); }).on('data', function(data) { //log('Ausgabe: ' + data); var wert = data.toString(); var arr2 = wert.split("Mem: "); arr2 = arr2[1].split(" "); var avai = arr2[50]; avai = parseInt(avai.replace(/Swap:/g, '')); //for (x=1; x<arr2.length; x++) { log ("x= " + x + " ; " + arr2[x]); } var gesamt = Number(arr2[10]); var used = Number(arr2[17]); if (gesamt > 0) { setState("javascript.0.System.Proxmox.PVE_Ram_gesamt", gesamt); log('Proxmox.PVE: ' + gesamt + " MB Ram gesamt (ohne Swap)"); } if (used > 0) { setState("javascript.0.System.Proxmox.PVE_Ram_used", used); log('Proxmox.PVE: ' + used + " MB Ram used (ohne Swap)"); } if (avai > 0) { setState("javascript.0.System.Proxmox.PVE_Ram_available", avai); log('Proxmox.PVE: ' + avai + " MB Ram available (ohne Swap)"); } }).stderr.on('data', function(data) { log('Fehler: ' + data); }); }); }).connect({ host: '192.168.243.9', port: 22, username: 'root', password: 'xxx' }); } schedule('*/5 * * * *', function () { GB_pve_holen(); });
Musste du nur anpassen.
Müsste eigentlich funktionieren. -
@ro75 sagte in gibt es mittlerweile ein regex für ein result?:
habe mir was mit JS gebaut,
stell doch mal hier ein.
-
Ich versuche es nur noch intelligenter zu machen - bissi Geduld und natürlich wäre JSONATA noch besser mit regEx. Deswegen gibts einmal mit JSONATA einmal versuche ich es ohne.
So bekommst Du erst mal alles in 4 Gruppen:
(?<=sda1)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)\s+(\d+.?\d*[G,M.L]?)
-
ich teile meinen JS-Code trotzdem mal. Vielleicht ja doch zu gebrauchen. Die Funktionen "SPlitter" und "Formatierer" bereiten nur die Daten auf.
Unten sind 3 Beispiele für die Daten. Bei mir hier einfach mal den RAM, SDA und SWAP. Über free und df bekommst du ja die Daten. Anstatt der festen Daten setzt du deine Datenpunkte halt ein, zeitlich oder via Trigger gesteuert.
function SPlitter(Datablock,StringReplaced='') { var text = Datablock; text = text.replace(StringReplaced,''); text = text.split(' '); text = Formatierer(text); return text; } function Formatierer(sValue) { var text=''; for(let i = 0; i < sValue.length; i++) { if (sValue[i] != '') { if (text=='') { text=sValue[i]; } else { text=text+','+sValue[i]; } } } return text; } //Aufruf var Ergebnis=SPlitter('Auslager: 4194300 319232 3875068','Auslager: '); Ergebnis = Ergebnis.split(','); log(Ergebnis[0]); log(Ergebnis[1]); //... var Ergebnis=SPlitter('Speicher: 16147708 8393912 316456 54536 7437340 7356696','Speicher: '); Ergebnis = Ergebnis.split(','); log(Ergebnis[0]); log(Ergebnis[1]); //... var Ergebnis=SPlitter('/dev/sda2 490048472 96476256 368605612 21% /','/dev/sda2'); Ergebnis = Ergebnis.split(','); log(Ergebnis[0]); log(Ergebnis[1]); //...
Die Daten kommen über den Linux-Control - Adapter.
Ro75.
-
Auch wenn Du kein JSONATA magst - ist es einfach genial:
hier mal zum Import - aber ich schau - ob man mit der regEx in Blockly irgendwie was ähnliches erreicht:
Wobei ich diesen RegEx Block im Blockly nicht verstehe - da ich denke der ist nur zur Selektion von Objekten gedacht
-
@mickym sagte in gibt es mittlerweile ein regex für ein result?:
Auch wenn Du kein JSONATA magst - ist es einfach genial:
ich mag es, weil es so genal ist, aber ich komm damit einfach nicht klar.
hab eben lange auf try.jsonata.org probiert. ohne erfolg@mickym sagte in gibt es mittlerweile ein regex für ein result?:
Wobei ich diesen RegEx Block im Blockly nicht verstehe - da ich denke der ist nur zur Selektion von Objekten gedacht
das ist es ja!
deswegen suche ich einen RegEx Block für das parsen von Texten.ich probier mal dein jsonata, danke
-
Wenn Du die Einheiten nicht haben willst - dann hier noch mal ohne Einheiten:
Der JSONATA Editor hat Problemen mit Text mit Zeilenvorschub. Wenn Du nur die Zeile nimmst kannst Du den Code ausprobieren.
Hier zum Ausprobieren: https://try.jsonata.org/y8wLpDzC9
Ohne Einheiten:
$match($, /(?<=sda1)\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+)%/).groups
Mit Einheiten:
$match($, /(?<=sda1)\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+.?\d+)[G,M.L]?\s+(\d+)%/).groups
Die regulären Ausdrücke kannst Du hier testen: https://regex101.com/r/OBgEsJ/1
Was ich nicht rausgefunden habe, ob man die Gruppen automatisch vervielfältigen kann. Das geht wahrscheinlich, aber da muss jemand mit mehr Kenntnissen zu Hilfe kommen.
-
@mickym Danke, hab schon gespielt
wird korrekt zerlegt.
muss noch Datenpunkte anlegen und reinschreiben.
mach ich morgen.Danke, nochmals
-
@homoran Es kommt automatisch ein Liste raus, so dass Du auf die Elemente direkt zugreifen kannst.
-
@mickym sagte in gibt es mittlerweile ein regex für ein result?:
@homoran Es kommt automatisch ein Liste raus, so dass Du auf die Elemente direkt zugreifen kannst.
so ist es!
das hab ich mir mit dem ersten debug als erstes angesehen was da raus komnt -
@homoran sagte in gibt es mittlerweile ein regex für ein result?:
@mickym sagte in gibt es mittlerweile ein regex für ein result?:
@homoran Es kommt automatisch ein Liste raus, so dass Du auf die Elemente direkt zugreifen kannst.
so ist es!
das hab ich mir mit dem ersten debug als erstes angesehen was da raus komntDu kannst das JSONATA Ergebnis aber anscheinend nicht direkt nutzen, sondern musst es erst einer Variablen zuweisen, um auf die Elemente zuzugreifen.
-
@mickym sagte in gibt es mittlerweile ein regex für ein result?:
Du kannst das JSONATA Ergebnis aber anscheinend nicht direkt nutzen, sondern musst es erst einer Variablen zuweisen, um auf die Elemente zuzugreifen.
ja, das hatte ich auch erst ohne Variable versucht.
Aber Variable macht den Rest dann kompakter