Beta Test js-controller Kiera (v6.0)
-
@foxriver76 sagte in Beta Test js-controller Kiera (v6.0):
@feuersturm Danke. Habe mal grob geschaut. Bitte im Issue das Host Objekt vom Slave posten und nach Möglichkeit auch die iobroker.json vom Slave. Da er Daten aus den beiden Quellen nutzt um die IP zu finden.
Issue ist angelegt https://github.com/ioBroker/ioBroker.admin/issues/2505
Feuer-sturm created this issue in ioBroker/ioBroker.adminclosed [bug]: js-controller update - unexpected character at line 1 coloum 1 of the JSON data #2505
-
Möglicherweise hat es nichts mit dem js-controller zu tun, aber ich bilde mir ein, das ich bei Adapter Installationen/Updates VOR js-controller 6.xxx nicht diese ganzen Warnmeldungen hatte.
Ja ich weiß, sind "nur" Warnmeldungen, aber auch Warnungen haben ja oftmals einen Hintergrund. Kann man das hier generell ignorieren? Wenn die Meldungen keine Bedeutung haben, kann man das für den Enduser nicht ausblendbar machen?
Also eine Checkbox, ob man die Meldungen abschalten möchte? So könnten Entwickler, die mit diesen Meldungen ggf. mehr anfangen können, sich diese Meldungen auch weiterhin anzeigen lassen.
Nur mal so ins unreine gesprochen ......
npm warn ERESOLVE overriding peer dependency npm warn While resolving: @iobroker/adapter-core@3.1.4 npm warn Found: @iobroker/types@6.0.0 npm warn node_modules/iobroker.admin/node_modules/@iobroker/types npm warn @iobroker/types@"6.0.0" from iobroker.admin@6.17.14 npm warn node_modules/iobroker.admin npm warn iobroker.admin@"stable" from the root project npm warn npm warn Could not resolve dependency: npm warn peer @iobroker/types@"^5.0.11" from @iobroker/adapter-core@3.1.4 npm warn node_modules/iobroker.admin/node_modules/@iobroker/adapter-core npm warn @iobroker/adapter-core@"^3.1.4" from iobroker.admin@6.17.14 npm warn node_modules/iobroker.admin npm warn npm warn Conflicting peer dependency: @iobroker/types@5.0.19 npm warn node_modules/@iobroker/types npm warn peer @iobroker/types@"^5.0.11" from @iobroker/adapter-core@3.1.4 npm warn node_modules/iobroker.admin/node_modules/@iobroker/adapter-core npm warn @iobroker/adapter-core@"^3.1.4" from iobroker.admin@6.17.14 npm warn node_modules/iobroker.admin
-
@jb_sullivan Gerne admin issue machen, dort ist https://github.com/ioBroker/ioBroker.admin/blob/761ded4f4947cef7d051dd74e11b5f785e652c25/packages/admin/package.json#L28 types als Production Dependency angegeben, das ist definitiv falsch.
-
@foxriver76 , moin, es gab vor einigen Tagen ein echarts Adapter update. Das hat aber das Problem der Einstellungen nicht gelöst.
Läuft aber im Hintergrund.
-
Warum sollte es ausgeblendet werden? Gerade Beta-Versionen sollen ja dazu dienen möglichst viele Fehler und Hinweise zu finden und für das Stable-Release in Angriff zu nehmen.
-
@esp8266 denke nicht dass das was mit controller zu tun hat. Entweder PRoblem bei echarts oder admin evtl. Welche Admin Version läuft denn
-
@foxriver76 , 6.17.14
-
@esp8266 sagte in Beta Test js-controller Kiera (v6.0):
@foxriver76 , moin, es gab vor einigen Tagen ein echarts Adapter update. Das hat aber das Problem der Einstellungen nicht gelöst.
Läuft aber im Hintergrund.
https://github.com/ioBroker/ioBroker.echarts/issues/630
sigi2345 created this issue in ioBroker/ioBroker.echartsclosed Update Fehler 1.8.1 #630
-
@thomas-braun
Darum ja eine Checkbox, ob man die Meldungen ggf. abschalten möchte.Entwickler und Beta Tester, müssen die Checkbox ja nicht anhaken. Aber der Otto Normal User bekommt bei allem was Rot oder Orange und noch mit der Beschriftung "Warn" gekennzeichnet ist, schnell feuchte Hände.
Darum die Frage, ob man solche Meldungen, wenn Sie keine Systemrelevanz für den Ordnungsgemäßen Betrieb haben und vermutlich eh durch die Entwickler selber gefunden und gefixt werden, für den Otto Normal User ausblendbar gestaltet werden können - nur so als Idee.
Nun aber wieder Back to Topic.
-
@jb_sullivan sagte in Beta Test js-controller Kiera (v6.0):
Aber der Otto Normal User bekommt bei allem was Rot oder Orange und noch mit der Beschriftung "Warn" gekennzeichnet ist, schnell feuchte Hände.
Der sollte aber auch keine Beta-Versionen verwenden...
-
@sigi234 puh habe jetzt einige Konstellationen probiert und es schaut aus als hätte echarts gar keine Config abseits vom Tab? Und ja Tab scheint kaputt zu sein in 1.8.x
Jop okay, nochmal ungewöhnliche Quelle aber auch damals gabs nur den Tab https://youtu.be/yBNHckiWNC4?si=lvqGdAjKaVjF1Mj7&t=100 und der Code schaut auch so aus als gabs da nie ne config
-
@foxriver76 sagte in Beta Test js-controller Kiera (v6.0):
@sigi234 puh habe jetzt einige Konstellationen probiert und es schaut aus als hätte echarts gar keine Config abseits vom Tab? Und ja Tab scheint kaputt zu sein in 1.8.x
Jop okay, nochmal ungewöhnliche Quelle aber auch damals gabs nur den Tab https://youtu.be/yBNHckiWNC4?si=lvqGdAjKaVjF1Mj7&t=100 und der Code schaut auch so aus als gabs da nie ne config
Jupp, der hatte nie eine config, kann mich zumindest nicht daran erinnern.
Bei mir läuft die Version 1.7.2 einwandfrei.Da weis @bluefox sicher mehr dazu.
-
@foxriver76 , jupp jetzt wo ihr es schreibt, gab es tatsächlich kein config Tab und wurde über die Seite echarts configuriert. Aber darüber kommt nichts mehr. Man fummelt ja auch nicht ständig in den Adaptern rum. Einmal eingestellt und gut ist. Ist mir Absolut entfallen....
1.7.2 läuft. -
Hallo zusammen,
da ich morgen ein paar Wochen abwesend sein werde habe ich gestern noch die aktuellen Updates gefahren.
Seitdem bekomme ich folgende Fehlermeldungen aus verschiedenen Scripten:
2024-06-17 13:22:00.002 - error: javascript.0 (125916) script.js.Materialdesign.Netzwerk: [netzwerkStatus] error: moment is not a function, stack: TypeError: moment is not a function
at Object.netzwerkStatus (script.js.Materialdesign.Netzwerk:2518:52)
at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1769:34)
at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
at listOnTimeout (node:internal/timers:569:17)
at processTimers (node:internal/timers:512:7)
2024-06-17 13:22:10.001 - error: javascript.0 (125916) script.js.Materialdesign.Netzwerk: [netzwerkStatus] error: moment is not a function, stack: TypeError: moment is not a function
at Object.netzwerkStatus (script.js.Materialdesign.Netzwerk:2518:52)
at Job.job (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1769:34)
at Job.invoke (/opt/iobroker/node_modules/node-schedule/lib/Job.js:171:15)
at /opt/iobroker/node_modules/node-schedule/lib/Invocation.js:268:28
at Timeout._onTimeout (/opt/iobroker/node_modules/node-schedule/lib/Invocation.js:228:7)
at listOnTimeout (node:internal/timers:569:17)
at processTimers (node:internal/timers:512:7)
2024-06-17 13:22:12.336 - info: linux-control.0 (3642478) State value to set for "linux-control.0.proxmox.Temp_Kern_1" has to be type "string" but received type "number"oder auch
2024-06-17 13:18:08.573 - error: javascript.0 (125916) script.js.Materialdesign.Proxmox: TypeError: moment.locale is not a function
2024-06-17 13:18:08.573 - error: javascript.0 (125916) at script.js.Materialdesign.Proxmox:362:8
2024-06-17 13:18:08.573 - error: javascript.0 (125916) at script.js.Materialdesign.Proxmox:789:3
2024-06-17 13:18:08.573 - error: javascript.0 (125916) at Script.runInContext (node:vm:133:12)
2024-06-17 13:18:08.579 - info: javascript.0 (125916) Start JavaScript script.js.Materialdesign.Skriptstatus (Javascript/js)
2024-06-17 13:18:08.593 - error: javascript.0 (125916) script.js.Materialdesign.Skriptstatus: TypeError: moment.locale is not a function
2024-06-17 13:18:08.593 - error: javascript.0 (125916) at script.js.Materialdesign.Skriptstatus:62:8
2024-06-17 13:18:08.593 - error: javascript.0 (125916) at script.js.Materialdesign.Skriptstatus:600:3
2024-06-17 13:18:08.593 - error: javascript.0 (125916) at Script.runInContext (node:vm:133:12)
2024-06-17 13:18:08.594 - info: javascript.0 (125916) Start JavaScript script.js.Materialdesign.StatusAdapter (Javascript/js)
2024-06-17 13:18:08.608 - error: javascript.0 (125916) script.js.Materialdesign.StatusAdapter: TypeError: moment.locale is not a function
2024-06-17 13:18:08.608 - error: javascript.0 (125916) at script.js.Materialdesign.StatusAdapter:80:8
2024-06-17 13:18:08.608 - error: javascript.0 (125916) at script.js.Materialdesign.StatusAdapter:678:3
2024-06-17 13:18:08.608 - error: javascript.0 (125916) at Script.runInContext (node:vm:133:12)Ich habe auch bereits die npm module mehrfach gelöscht und neu eingetragen sowie den Adapter neu gestartet. Außerdem habe ich auch einen neue Instanz angelegt, die Module wieder eingetragen und eines der Scripte dort ausgeführt mit dem selben Fehlerbild.
Es scheint aber die NPM Module sind korrekt eingetragen
Allerdings scheint da was bei der Syntaxhilfe auch nicht mehr zu funktionieren. Sobald ich die Eintrage zeigt er mir am Textende nur den Cursor und bei Betätigen von enter oder speichern wird es scheinbar nicht übernommen.
2024-06-17 13:25:04.564 - debug: javascript.0 (241347) Found custom dependency in config: "moment-timezone@latest"
2024-06-17 13:25:07.191 - debug: javascript.0 (241347) Installed custom dependency: "moment-timezone@latest"
2024-06-17 13:25:07.201 - debug: javascript.0 (241347) Found custom dependency in config: "moment-duration-format@latest"
2024-06-17 13:25:09.864 - debug: javascript.0 (241347) Installed custom dependency: "moment-duration-format@latest"
2024-06-17 13:25:09.885 - debug: javascript.0 (241347) Found custom dependency in config: "moment@latest"
2024-06-17 13:25:12.578 - debug: javascript.0 (241347) Installed custom dependency: "moment@latest"
Hir noch die Ausgabe von IOB DIAG
Skript v.2024-05-22 *** BASE SYSTEM *** Static hostname: iobroker Icon name: computer-container Chassis: container ☐ Virtualization: lxc Operating System: Debian GNU/Linux 12 (bookworm) Kernel: Linux 6.5.11-7-pve Architecture: x86-64 model name : Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz Docker : false Virtualization : lxc Kernel : x86_64 Userland : 64 bit Systemuptime and Load: 15:11:03 up 15 days, 3:37, 2 users, load average: 1.70, 1.85, 1.45 CPU threads: 2 *** Time and Time Zones *** Local time: Mon 2024-06-17 15:11:03 CEST Universal time: Mon 2024-06-17 13:11:03 UTC RTC time: n/a Time zone: Europe/Berlin (CEST, +0200) System clock synchronized: yes NTP service: inactive RTC in local TZ: no *** Users and Groups *** User that called 'iob diag': uviob HOME=/home/uviob GROUPS=uviob sudo iobroker User that is running 'js-controller': iobroker HOME=/home/iobroker GROUPS=iobroker tty dialout audio video plugdev *** Display-Server-Setup *** Display-Server: false Desktop: Terminal: Boot Target: graphical.target *** MEMORY *** total used free shared buff/cache available Mem: 8.6G 7.3G 296M 2.3M 963M 1.3G Swap: 536M 233M 303M Total: 9.1G 7.6G 600M Active iob-Instances: 0 8192 M total memory 6828 M used memory 6094 M active memory 1249 M inactive memory 445 M free memory 0 M buffer memory 918 M swap cache 512 M total swap 222 M used swap 289 M free swap *** top - Table Of Processes *** top - 15:11:03 up 15 days, 3:37, 2 users, load average: 1.70, 1.85, 1.45 Tasks: 71 total, 2 running, 69 sleeping, 0 stopped, 0 zombie %Cpu(s): 33.3 us, 0.0 sy, 0.0 ni, 33.3 id, 33.3 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 8192.0 total, 618.0 free, 6655.3 used, 918.7 buff/cache MiB Swap: 512.0 total, 289.7 free, 222.3 used. 1536.7 avail Mem *** FAILED SERVICES *** UNIT LOAD ACTIVE SUB DESCRIPTION * systemd-networkd-wait-online.service loaded failed failed Wait for Network to be Configured LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 1 loaded units listed. *** FILESYSTEM *** Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/pve-vm--210--disk--1 ext4 25G 15G 8.6G 63% / none tmpfs 492K 4.0K 488K 1% /dev tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs tmpfs 3.1G 2.6M 3.1G 1% /run tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/1000 Messages concerning ext4 filesystem in dmesg: [Sun Jun 2 11:32:42 2024] EXT4-fs (dm-1): mounted filesystem 1192067b-46b8-4ac5-a608-5f91cdfb985a ro with ordered data mode. Quota mode: none. [Sun Jun 2 11:32:43 2024] EXT4-fs (dm-1): re-mounted 1192067b-46b8-4ac5-a608-5f91cdfb985a r/w. Quota mode: none. [Sun Jun 2 11:32:44 2024] EXT4-fs (sda): mounted filesystem 52b7d67a-b075-47cb-8f0d-78dafd5f3aa1 r/w with ordered data mode. Quota mode: none. [Sun Jun 2 11:32:57 2024] EXT4-fs warning (device dm-8): ext4_multi_mount_protect:328: MMP interval 42 higher than expected, please wait. [Sun Jun 2 11:33:42 2024] EXT4-fs (dm-8): 15 orphan inodes deleted [Sun Jun 2 11:33:42 2024] EXT4-fs (dm-8): recovery complete [Sun Jun 2 11:33:42 2024] EXT4-fs (dm-8): mounted filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0 r/w with ordered data mode. Quota mode: none. [Mon Jun 3 03:06:03 2024] EXT4-fs (dm-9): mounted filesystem 17044e68-e7a9-4220-9781-345fb7310a16 r/w with ordered data mode. Quota mode: none. [Mon Jun 3 03:06:15 2024] EXT4-fs (dm-9): unmounting filesystem 17044e68-e7a9-4220-9781-345fb7310a16. [Mon Jun 3 03:11:55 2024] EXT4-fs (dm-10): write access unavailable, skipping orphan cleanup [Mon Jun 3 03:11:55 2024] EXT4-fs (dm-10): mounted filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0 ro without journal. Quota mode: none. [Mon Jun 3 03:19:44 2024] EXT4-fs (dm-10): unmounting filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0. [Mon Jun 3 03:19:45 2024] EXT4-fs (dm-7): mounted filesystem 06481f10-cf2d-4303-b869-aafe07fe3d39 r/w with ordered data mode. Quota mode: none. [Mon Jun 3 03:20:00 2024] EXT4-fs (dm-7): unmounting filesystem 06481f10-cf2d-4303-b869-aafe07fe3d39. [Mon Jun 10 03:05:30 2024] EXT4-fs (dm-9): mounted filesystem 17044e68-e7a9-4220-9781-345fb7310a16 r/w with ordered data mode. Quota mode: none. [Mon Jun 10 03:05:43 2024] EXT4-fs (dm-9): unmounting filesystem 17044e68-e7a9-4220-9781-345fb7310a16. [Mon Jun 10 03:11:17 2024] EXT4-fs (dm-10): write access unavailable, skipping orphan cleanup [Mon Jun 10 03:11:17 2024] EXT4-fs (dm-10): mounted filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0 ro without journal. Quota mode: none. [Mon Jun 10 03:19:01 2024] EXT4-fs (dm-10): unmounting filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0. [Mon Jun 10 03:19:01 2024] EXT4-fs (dm-7): mounted filesystem 06481f10-cf2d-4303-b869-aafe07fe3d39 r/w with ordered data mode. Quota mode: none. [Mon Jun 10 03:19:18 2024] EXT4-fs (dm-7): unmounting filesystem 06481f10-cf2d-4303-b869-aafe07fe3d39. [Mon Jun 17 03:05:11 2024] EXT4-fs (dm-9): mounted filesystem 17044e68-e7a9-4220-9781-345fb7310a16 r/w with ordered data mode. Quota mode: none. [Mon Jun 17 03:05:24 2024] EXT4-fs (dm-9): unmounting filesystem 17044e68-e7a9-4220-9781-345fb7310a16. [Mon Jun 17 03:11:02 2024] EXT4-fs (dm-10): write access unavailable, skipping orphan cleanup [Mon Jun 17 03:11:02 2024] EXT4-fs (dm-10): mounted filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0 ro without journal. Quota mode: none. [Mon Jun 17 03:18:51 2024] EXT4-fs (dm-10): unmounting filesystem 8c9be52e-5c56-4c56-9e37-b7adc973b1e0. [Mon Jun 17 03:18:51 2024] EXT4-fs (dm-7): mounted filesystem 06481f10-cf2d-4303-b869-aafe07fe3d39 r/w with ordered data mode. Quota mode: none. [Mon Jun 17 03:19:07 2024] EXT4-fs (dm-7): unmounting filesystem 06481f10-cf2d-4303-b869-aafe07fe3d39. Show mounted filesystems: TARGET SOURCE FSTYPE OPTIONS / /dev/mapper/pve-vm--210--disk--1 ext4 rw,relatime,stripe=16 |-/run tmpfs tmpfs rw,nosuid,nodev,size=3245872k,nr_inodes=819200,mode=755,inode64 | |-/run/lock tmpfs tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k,inode64 | |-/run/rpc_pipefs sunrpc rpc_pipefs rw,relatime | |-/run/credentials/systemd-tmpfiles-setup.service ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700 | |-/run/credentials/systemd-sysctl.service ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700 | |-/run/credentials/systemd-sysusers.service ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700 | |-/run/credentials/systemd-tmpfiles-setup-dev.service ramfs ramfs ro,nosuid,nodev,noexec,relatime,mode=700 | `-/run/user/1000 tmpfs tmpfs rw,nosuid,nodev,relatime,size=1622932k,nr_inodes=405733,mode=700,uid=1000,gid=1000,inode64 |-/dev none tmpfs rw,relatime,size=492k,mode=755,inode64 | |-/dev/shm tmpfs tmpfs rw,nosuid,nodev,inode64 | |-/dev/hugepages hugetlbfs hugetlbfs rw,relatime,pagesize=2M | |-/dev/mqueue mqueue mqueue rw,nosuid,nodev,noexec,relatime | |-/dev/.lxc/proc proc proc rw,relatime | |-/dev/.lxc/sys sys sysfs rw,relatime | |-/dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666,max=1026 | |-/dev/ptmx devpts[/ptmx] devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666,max=1026 | |-/dev/console devpts[/0] devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666,max=1026 | |-/dev/tty1 devpts[/1] devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666,max=1026 | `-/dev/tty2 devpts[/2] devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666,max=1026 |-/proc proc proc rw,nosuid,nodev,noexec,relatime | |-/proc/sys proc[/sys] proc ro,relatime | | |-/proc/sys/kernel/random/boot_id none[/.lxc-boot-id] tmpfs ro,nosuid,nodev,noexec,relatime,size=492k,mode=755,inode64 | | `-/proc/sys/net proc[/sys/net] proc rw,nosuid,nodev,noexec,relatime | |-/proc/sysrq-trigger proc[/sysrq-trigger] proc ro,relatime | |-/proc/cpuinfo lxcfs[/proc/cpuinfo] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | |-/proc/diskstats lxcfs[/proc/diskstats] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | |-/proc/loadavg lxcfs[/proc/loadavg] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | |-/proc/meminfo lxcfs[/proc/meminfo] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | |-/proc/slabinfo lxcfs[/proc/slabinfo] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | |-/proc/stat lxcfs[/proc/stat] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | |-/proc/swaps lxcfs[/proc/swaps] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other | `-/proc/uptime lxcfs[/proc/uptime] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other `-/sys sysfs sysfs ro,nosuid,nodev,noexec,relatime |-/sys/fs/fuse/connections fusectl fusectl rw,nosuid,nodev,noexec,relatime |-/sys/devices/virtual/net sysfs[/devices/virtual/net] sysfs rw,nosuid,nodev,noexec,relatime |-/sys/fs/cgroup none cgroup2 rw,nosuid,nodev,noexec,relatime `-/sys/devices/system/cpu lxcfs[/sys/devices/system/cpu] fuse.lxcfs rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other Files in neuralgic directories: /var: 3.4G /var/ 2.8G /var/log 2.5G /var/log/journal/c337b259b2a44b9da1e2356e14b395e6 2.5G /var/log/journal 461M /var/cache Hint: You are currently not seeing messages from other users and the system. Users in groups 'adm', 'systemd-journal' can see all messages. Pass -q to turn off this notice. Archived and active journals take up 1.0G in the file system. /opt/iobroker/backups: 69M /opt/iobroker/backups/ /opt/iobroker/iobroker-data: 1.2G /opt/iobroker/iobroker-data/ 986M /opt/iobroker/iobroker-data/files 251M /opt/iobroker/iobroker-data/files/vis 243M /opt/iobroker/iobroker-data/files/vis/widgets 156M /opt/iobroker/iobroker-data/files/vis-2 The five largest files in iobroker-data are: 35M /opt/iobroker/iobroker-data/files/devices.admin/static/js/main.24f2bb56.js.map 29M /opt/iobroker/iobroker-data/files/backitup.admin/static/js/main.ecef4f21.js.map 26M /opt/iobroker/iobroker-data/objects.jsonl 24M /opt/iobroker/iobroker-data/files/web.admin/static/js/main.4ff93037.js.map 24M /opt/iobroker/iobroker-data/files/vis-2/static/js/main.f305bc29.js.map USB-Devices by-id: USB-Sticks - Avoid direct links to /dev/tty* in your adapter setups, please always prefer the links 'by-id': No Devices found 'by-id' *** NodeJS-Installation *** /usr/bin/nodejs v18.20.3 /usr/bin/node v18.20.3 /usr/bin/npm 10.7.0 /usr/bin/npx 10.7.0 /usr/bin/corepack 0.28.0 nodejs: Installed: 18.20.3-1nodesource1 Candidate: 18.20.3-1nodesource1 Version table: *** 18.20.3-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 100 /var/lib/dpkg/status 18.20.2-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.20.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.20.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.19.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.19.0+dfsg-6~deb12u1 500 500 http://security.debian.org bookworm-security/main amd64 Packages 18.19.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.18.2-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.18.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.18.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.17.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.17.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.16.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.16.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.15.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.14.2-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.14.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.14.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.13.0+dfsg1-1 500 500 http://ftp.debian.org/debian bookworm/main amd64 Packages 18.13.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.12.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.11.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.10.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.9.1-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.9.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.8.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.7.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.6.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.5.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.4.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.3.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.2.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.1.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages 18.0.0-1nodesource1 1001 500 https://deb.nodesource.com/node_18.x nodistro/main amd64 Packages Temp directories causing npm8 problem: 0 No problems detected Errors in npm tree: *** ioBroker-Installation *** ioBroker Status No connection to databases possible ... Core adapters versions js-controller: 6.0.4 admin: 6.17.14 javascript: 8.3.1 nodejs modules from github: 0 Adapter State No connection to databases possible ... Enabled adapters with bindings ioBroker-Repositories Stable (default): http://download.iobroker.net/sources-dist.json Beta (latest) : http://download.iobroker.net/sources-dist-latest.json Active repo(s): Stable (default) Installed ioBroker-Instances Used repository: Stable (default) Adapter "admin" : 6.13.16 , installed 6.17.14 Adapter "alias-manager": 1.2.6 , installed 1.2.6 Adapter "backitup" : 2.11.0 , installed 3.0.3 Adapter "bmw" : 2.5.7 , installed 2.8.0 Adapter "cloud" : 5.0.1 , installed 5.0.1 Adapter "daswetter" : 3.1.15 , installed 3.1.15 Adapter "device-watcher": 2.12.1 , installed 2.12.1 Adapter "devices" : 1.1.5 , installed 1.1.5 Adapter "discovery" : 4.5.0 , installed 4.5.0 Adapter "feiertage" : 1.2.0 , installed 1.2.0 Adapter "fitbit-fitness": 0.5.0 , installed 0.5.0 Adapter "flot" : 1.12.0 , installed 1.12.0 Adapter "fritzdect" : 2.5.9 , installed 2.5.9 Adapter "heizoel" : 1.0.3 , installed 1.0.3 Adapter "history" : 3.0.1 , installed 3.0.1 Adapter "hm-rega" : 4.0.0 , installed 4.0.0 Adapter "hm-rpc" : 1.17.0 , installed 1.17.0 Adapter "ical" : 1.15.0 , installed 1.15.0 Adapter "icons-addictive-flavour-png": 0.1.0, installed 0.1.0 Adapter "icons-fatcow-hosting": 0.1.0, installed 0.1.0 Adapter "icons-icons8" : 0.0.1 , installed 0.0.1 Adapter "icons-material-png": 0.1.0, installed 0.1.0 Adapter "icons-material-svg": 0.1.0, installed 0.1.0 Adapter "icons-mfd-png": 1.2.1 , installed 1.2.1 Adapter "icons-mfd-svg": 1.2.0 , installed 1.2.0 Adapter "icons-open-icon-library-png": 0.1.2, installed 0.1.3 Adapter "icons-ultimate-png": 1.0.1, installed 1.0.1 Adapter "javascript" : 8.3.1 , installed 8.3.1 Controller "js-controller": 5.0.19 , installed 6.0.4 Adapter "linux-control": 1.1.5 , installed 1.1.5 Adapter "mqtt" : 5.2.0 , installed 5.2.0 Adapter "net-tools" : 1.0.11 , installed 1.0.11 Adapter "netatmo" : 3.1.0 , installed 3.1.0 Adapter "notification-manager": 1.1.2, installed 1.1.2 Adapter "openweathermap": 1.0.4 , installed 1.0.4 Adapter "ping" : 1.6.2 , installed 1.6.2 Adapter "proxmox" : 2.3.0 , installed 2.3.0 Adapter "simple-api" : 2.8.0 , installed 2.8.0 Adapter "socketio" : 6.7.0 , installed 6.7.0 Adapter "sprinklecontrol": 0.2.13 , installed 0.2.13 Adapter "tahoma" : 0.10.4 , installed 0.10.4 Adapter "telegram" : 3.3.2 , installed 3.5.1 Adapter "text2command" : 3.0.3 , installed 3.0.3 Adapter "tr-064" : 4.3.0 , installed 4.3.0 Adapter "trashschedule": 3.3.0 , installed 3.3.0 Adapter "vis" : 1.5.6 , installed 1.5.6 Adapter "vis-2" : 2.9.32 , installed 2.9.64 Adapter "vis-2-widgets-energy": 0.3.11, installed 0.3.11 Adapter "vis-2-widgets-gauges": 1.0.3, installed 1.0.3 Adapter "vis-2-widgets-material": 1.3.32, installed 1.3.33 Adapter "vis-2-widgets-radar-trap": 2.0.0, installed 2.0.0 Adapter "vis-bars" : 0.1.4 , installed 0.1.4 Adapter "vis-colorpicker": 2.0.3 , installed 2.0.3 Adapter "vis-fancyswitch": 1.1.0 , installed 1.1.0 Adapter "vis-google-fonts": 1.0.4 , installed 1.0.4 Adapter "vis-hqwidgets": 1.5.1 , installed 1.5.1 Adapter "vis-icontwo" : 1.5.0 , installed 1.5.0 Adapter "vis-inventwo" : 3.3.4 , installed 3.3.4 Adapter "vis-jqui-mfd" : 1.1.1 , installed 1.1.1 Adapter "vis-justgage" : 2.1.7 , installed 2.1.7 Adapter "vis-lcars" : 1.1.1 , installed 1.1.1 Adapter "vis-materialdesign": 0.5.9, installed 0.5.9 Adapter "vis-metro" : 1.2.0 , installed 1.2.0 Adapter "vis-plumb" : 1.0.2 , installed 1.0.2 Adapter "vis-timeandweather": 1.2.2, installed 1.2.2 Adapter "vis-weather" : 2.5.9 , installed 2.5.9 Adapter "web" : 6.2.5 , installed 6.2.6 Adapter "wled" : 0.7.2 , installed 0.7.3-beta.0 Adapter "ws" : 2.6.1 , installed 2.6.1 Objects and States Please stand by - This may take a while Objects: 1 States: 18125 *** OS-Repositories and Updates *** Hit:1 http://security.debian.org bookworm-security InRelease Hit:2 http://ftp.debian.org/debian bookworm InRelease Hit:3 http://ftp.debian.org/debian bookworm-updates InRelease Hit:4 https://deb.nodesource.com/node_18.x nodistro InRelease Reading package lists... Pending Updates: 0 *** Listening Ports *** Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 0 0 192.168.178.213:8081 0.0.0.0:* LISTEN 1001 98604566 1857593/io.admin.0 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1001 98604508 1857575/iobroker.js tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 1001 98604501 1857575/iobroker.js tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 0 41595 973/master tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 0 2994 1/init tcp6 0 0 ::1:25 :::* LISTEN 0 41596 973/master tcp6 0 0 :::111 :::* LISTEN 0 2996 1/init tcp6 0 0 :::22 :::* LISTEN 0 26573 1/init udp 0 0 0.0.0.0:111 0.0.0.0:* 0 2995 1/init udp6 0 0 :::111 :::* 0 2997 1/init *** Log File - Last 25 Lines *** 2024-06-17 15:12:39.905 - silly: javascript.0 (1857635) redis psubscribe cfg.o.system.user.* 2024-06-17 15:12:39.931 - silly: javascript.0 (1857635) redis psubscribe cfg.o.enum.* 2024-06-17 15:12:39.932 - silly: javascript.0 (1857635) objectDB connected 2024-06-17 15:12:39.933 - debug: javascript.0 (1857635) Redis States: Use Redis connection: 127.0.0.1:9000 2024-06-17 15:12:39.949 - debug: javascript.0 (1857635) States create System PubSub Client 2024-06-17 15:12:39.949 - debug: javascript.0 (1857635) States create User PubSub Client 2024-06-17 15:12:40.021 - debug: javascript.0 (1857635) States connected to redis: 127.0.0.1:9000 2024-06-17 15:12:40.021 - silly: javascript.0 (1857635) statesDB connected 2024-06-17 15:12:40.048 - debug: javascript.0 (1857635) Plugin sentry Initialize Plugin (enabled=true) 2024-06-17 15:12:40.186 - info: javascript.0 (1857635) starting. Version 8.3.1 in /opt/iobroker/node_modules/iobroker.javascript, node: v18.20.3, js-controller: 6.0.4 2024-06-17 15:12:40.196 - debug: javascript.0 (1857635) config.subscribe (Do not subscribe all states on start): false 2024-06-17 15:12:40.213 - silly: javascript.0 (1857635) writeFile(filename: "javascript.d.ts", content: length 74273, overwrite: true 2024-06-17 15:12:40.213 - silly: javascript.0 (1857635) creating new file with version 1 2024-06-17 15:12:40.213 - silly: javascript.0 (1857635) writeFile(filename: "javascript.d.ts", content: length 74273, overwrite: true 2024-06-17 15:12:40.213 - silly: javascript.0 (1857635) creating new file with version 1 2024-06-17 15:12:40.214 - debug: javascript.0 (1857635) Found custom dependency in config: "mathjs@latest" 2024-06-17 15:12:40.219 - silly: javascript.0 (1857635) States system redis pmessage system.adapter.javascript.0.logLevel/system.adapter.javascript.0.logLevel:{"val":"silly","ack":true,"ts":1718629960215,"q":0,"from":"system.adapter.javascript.0","lc":1718623500703} 2024-06-17 15:12:43.294 - info: host.iobroker instance system.adapter.telegram.0 started with pid 1857686 2024-06-17 15:12:43.295 - silly: javascript.0 (1857635) States system redis pmessage io.log.system.adapter.javascript.0/io.log.system.adapter.javascript.0:{"severity":"info","ts":1718629963294,"message":"host.iobroker instance system.adapter.telegram.0 started with pid 1857686","from":"host.iobroker","_id":48789872} 2024-06-17 15:12:43.773 - debug: javascript.0 (1857635) Installed custom dependency: "mathjs@latest" 2024-06-17 15:12:45.018 - debug: javascript.0 (1857635) Found custom dependency in config: "moment-timezone@latest" 2024-06-17 15:12:45.066 - info: telegram.0 (1857686) starting. Version 3.5.1 in /opt/iobroker/node_modules/iobroker.telegram, node: v18.20.3, js-controller: 6.0.4 2024-06-17 15:12:45.153 - silly: javascript.0 (1857635) States system redis pmessage io.log.system.adapter.javascript.0/io.log.system.adapter.javascript.0:{"severity":"info","ts":1718629965066,"message":"telegram.0 (1857686) starting. Version 3.5.1 in /opt/iobroker/node_modules/iobroker.telegram, node: v18.20.3, js-controller: 6.0.4","from":"telegram.0","_id":22270636} 2024-06-17 15:12:47.322 - silly: javascript.0 (1857635) States system redis pmessage io.log.system.adapter.javascript.0/io.log.system.adapter.javascript.0:{"severity":"info","ts":1718629967319,"message":"host.iobroker instance system.adapter.backitup.0 started with pid 1858269","from":"host.iobroker","_id":48789874} 2024-06-17 15:12:47.319 - info: host.iobroker instance system.adapter.backitup.0 started with pid 1858269
Und kurz
======================= SUMMARY ======================= v.2024-05-22 Static hostname: iobroker Icon name: computer-container Chassis: container ☐ Virtualization: lxc Operating System: Debian GNU/Linux 12 (bookworm) Kernel: Linux 6.5.11-7-pve Architecture: x86-64 Installation: lxc Kernel: x86_64 Userland: 64 bit Timezone: Europe/Berlin (CEST, +0200) User-ID: 1000 Display-Server: false Boot Target: graphical.target Pending OS-Updates: 0 Pending iob updates: 0 Nodejs-Installation: /usr/bin/nodejs v18.20.3 /usr/bin/node v18.20.3 /usr/bin/npm 10.7.0 /usr/bin/npx 10.7.0 /usr/bin/corepack 0.28.0 Recommended versions are nodejs 18.20.3 and npm 10.7.0 Your nodejs installation is correct MEMORY: total used free shared buff/cache available Mem: 8.6G 2.8G 4.3G 2.5M 1.4G 5.8G Swap: 536M 7.1M 529M Total: 9.1G 2.8G 4.8G Active iob-Instances: 34 Active repo(s): Stable (default) ioBroker Core: js-controller 6.0.4 admin 6.17.14 ioBroker Status: iobroker is running on this host. Objects type: jsonl States type: jsonl Status admin and web instance: + system.adapter.admin.0 : admin : iobroker - enabled, port: 8081, bind: 192.168.178.213, run as: admin + system.adapter.web.0 : web : iobroker - enabled, port: 8082, bind: 0.0.0.0, run as: admin Objects: 20914 States: 18458 Size of iob-Database: 36M /opt/iobroker/iobroker-data/objects.jsonl 18M /opt/iobroker/iobroker-data/states.jsonl =================== END OF SUMMARY ====================
Jemand einen Tip für mich?
-
@uv-on-fire mit controller beta bitte auch javascript beta nutzen (8.6.0 aktuell)
-
@foxriver76
Hast natürlich recht. Habe soviel rumptobiert und auch mal eine ältere Version wieder installiert. Dachte ich hätte auch den controller wieder zurückgesetzt aber das ahbe ich wohl vergessen.Macht aber keinen Unterschied. Hier das aktuelle log nach wieder update auf 8.6.0
2024-06-17 16:30:07.577 - error: javascript.0 (3014300) script.js.Materialdesign.StatusAdapter: [adapterStatus] error: moment.duration(...).format is not a function, stack: TypeError: moment.duration(...).format is not a function
at Object.adapterStatus (script.js.Materialdesign.StatusAdapter:2370:115)
at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1427:38)
at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:644:29)
at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.ts:11043:62)
at processImmediate (node:internal/timers:476:21)
-
@uv-on-fire Hilft dir das https://github.com/ioBroker/ioBroker.javascript/issues/1613
Poste da gerne auch mal dein Skript rein.
MK-66 created this issue in ioBroker/ioBroker.javascriptopen [Bug]: moment-duration-format generates script error with js-controller 6.x #1613
-
@foxriver76 @haus-automatisierung
Danke für den Fix mit den NPM Modulen und den hint mit demmomentDurationFormatSetup(moment);
Jetzt läuft mit cotroller 6.0.5 und java 8.6.0 wieder alles einwandfrei.
-
@foxriver76
Sorry für die verspätete Antwort aber wie gesagt bin morgen für längere Zeit weg und muss noch einiges regeln bis dahin.Also der Fix hat funktioniert.
Interessanterweise hat es genügt das in einem der Skripte ein zu tragen und jetzt laufen alle.
Jetzt motz noch ein anderes skript mathjs an
vascript.0
2024-06-17 21:31:59.693 error script.js.Materialdesign.Proxmox: [calculateCpuAverage] '0_userdata.0.Vis.MaterialDesignWidgets.Proxmox.vm.qemu_RaspiMatic.cpuLastValues' - error: Cannot read properties of undefined (reading 'round'), stack: TypeError: Cannot read properties of undefined (reading 'round') at calculateCpuAverage (script.js.Materialdesign.Proxmox:2891:140) at generateProgressBarCpuRow (script.js.Materialdesign.Proxmox:2791:9) at updateVm (script.js.Materialdesign.Proxmox:2598:9) at updateData (script.js.Materialdesign.Proxmox:2530:9) at script.js.Materialdesign.Proxmox:2939:1 at script.js.Materialdesign.Proxmox:2945:3 at Script.runInContext (node:vm:133:12) at Script.runInNewContext (node:vm:138:17) at execute (/opt/iobroker/node_modules/iobroker.javascript/main.js:1968:23) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2215:13)
javascript.0
2024-06-17 21:31:59.692 error script.js.Materialdesign.Proxmox: [calculateCpuAverage] '0_userdata.0.Vis.MaterialDesignWidgets.Proxmox.vm.lxc_ioBroker.cpuLastValues' - error: Cannot read properties of undefined (reading 'round'), stack: TypeError: Cannot read properties of undefined (reading 'round') at calculateCpuAverage (script.js.Materialdesign.Proxmox:2891:140) at generateProgressBarCpuRow (script.js.Materialdesign.Proxmox:2791:9) at updateVm (script.js.Materialdesign.Proxmox:2598:9) at updateData (script.js.Materialdesign.Proxmox:2530:9) at script.js.Materialdesign.Proxmox:2939:1 at script.js.Materialdesign.Proxmox:2945:3 at Script.runInContext (node:vm:133:12) at Script.runInNewContext (node:vm:138:17) at execute (/opt/iobroker/node_modules/iobroker.javascript/main.js:1968:23) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2215:13)
javascript.0
2024-06-17 21:31:59.689 error script.js.Materialdesign.Proxmox: [calculateCpuAverage] '0_userdata.0.Vis.MaterialDesignWidgets.Proxmox.node.promox.cpuLastValues' - error: Cannot read properties of undefined (reading 'round'), stack: TypeError: Cannot read properties of undefined (reading 'round') at calculateCpuAverage (script.js.Materialdesign.Proxmox:2891:140) at generateProgressBarCpuRow (script.js.Materialdesign.Proxmox:2791:9) at updateVm (script.js.Materialdesign.Proxmox:2598:9) at updateData (script.js.Materialdesign.Proxmox:2526:9) at script.js.Materialdesign.Proxmox:2939:1 at script.js.Materialdesign.Proxmox:2945:3 at Script.runInContext (node:vm:133:12) at Script.runInNewContext (node:vm:138:17) at execute (/opt/iobroker/node_modules/iobroker.javascript/main.js:1968:23) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2215:13)
javascript.0
2024-06-17 21:31:59.686 error at Script.runInContext (node:vm:133:12)
javascript.0
2024-06-17 21:31:59.686 error at script.js.Materialdesign.Proxmox:789:3
javascript.0
2024-06-17 21:31:59.686 error at script.js.Materialdesign.Proxmox:359:16
javascript.0
2024-06-17 21:31:59.686 error at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:548:32)
javascript.0
2024-06-17 21:31:59.686 error at require (node:internal/modules/helpers:177:18)
javascript.0
2024-06-17 21:31:59.686 error at Module.require (node:internal/modules/cjs/loader:1231:19)
javascript.0
2024-06-17 21:31:59.686 error script.js.Materialdesign.Proxmox: Error: Cannot find module 'mathjs'
Das skript dazu:
/************************************************************************************************************************************************************************
Version: 1.0.2
created by ScroungerDieses Skript erzeugt json strings um Proxmox Informationen im VIS mit den Material Design Widgets darzustellen
!!! Voraussetzungen !!!
- Material Design Widgets >= 0.3.19
- Proxmox >= 1.0.2
- Javascript Adapter >= 4.6.1
- Javascript Adapter NPM Module: moment, moment-timezone, moment-duration-format, mathjs
=========================================================================================================================================================================
--- Links ---
- Support: https://forum.iobroker.net/topic/35296/material-design-widgets-proxmox
- Github: https://github.com/Scrounger/ioBroker.vis-materialdesign/tree/master/examples/Proxmox
=========================================================================================================================================================================
--- Changelog ---
- 1.0.0: Initial release
- 1.0.1: Number decimal format changed
- 1.0.2: Bug Fix wenn nur ein Datenpunkt für die Temperatur verwendet wird
- 1.0.3: Einstellung 'iconColor' für icon Farbe hinzugefügt
************************************************************************************************************************************************************************/
// Skript Einstellungen *************************************************************************************************************************************************
let idDatenpunktPrefix = '0_userdata.0' // '0_userdata.0' or 'javascript.x'
let idDatenPunktStrukturPrefix = 'Vis.MaterialDesignWidgets.Proxmox' // Struktur unter Prefixlet triggerDatenpunkt = "proxmox.0.node_pve.uptime"; // Datenpunkt um Skript Ausführung zu triggern (z.B. uptime einer Node)
let cpuAverageLastValues = 60; // Wieviele Werte zur Berechnung der durchschnittlichen CPU Last verwendet werden sollen
let nodesList = [ // Node Liste
{
idChannel: 'proxmox.0.node_pve', // id des Channels der Node
targetChannel: 'promox', // id unter der der json string für das Table Widget gespeichert werden soll
name: 'System', // name der als Titel angezeigt werden soll
image: '/vis.0/Bilder/GeraeteBatterien/NUC.png', // Bild das im Titel angezeigt werden soll
url: 'https://192.168.178.210:8006/', // Url die aufgerufen wird beim Klick auf den Titel
showControlButtons: true, // Buttons für start, restart, stop anzeigen
// temperatures: ['linkeddevices.0.System.Temperatur.Core_0', 'linkeddevices.0.System.Temperatur.Core_1'], // Datenpunkte für Temperatur (1 oder 2 Datenpunkte, entfernen wenn nicht benötigt)
storages: [ // Storage Datenpunkt des Proxmox Adapter anzeigen
{
idChannel: 'proxmox.0.storage.pve_local', // id des Storage Datenpunkts
text: 'Local', // Text der für den Storage angezeigt werden soll
icon: 'harddisk' // Icon das für den Storage angezeigt werden soll
},
{
idChannel: 'proxmox.0.storage.pve_local-lvm',
text: 'LVM',
icon: 'harddisk'
},
{
idChannel: 'proxmox.0.storage.pve_local2_60gb',
text: 'Backup',
icon: 'harddisk'
},
{
idChannel: 'proxmox.0.storage.pve_Backups',
text: 'Mirror',
icon: 'harddisk'
}
],
custom: [ // andere Datenpunkte (nicht vom Proxmox Adapter) die mit aufgelistet werden sollen. Falls nicht benötigt, Array löschen
{
id: 'linux-control.0.proxmox.needrestart.needrestart', // id des Datenpunktes
text: 'Neustart notwendig', // text der angezeigt werden soll
icon: 'restart', // icon das angezeigt werden soll
type: 'boolean', // welche Funktion verwendet werden soll
attention: true // ob Attention Farbe angezeigt werden soll
},
{
id: 'linux-control.0.proxmox.updates.newPackages', // id des Datenpunktes
text: 'Updates', // text der angezeigt werden soll
icon: 'package-down', // icon das angezeigt werden soll
type: 'number', // welche Funktion verwendet werden soll
attention: true // ob Attention Farbe angezeigt werden soll
},
{
id: 'linux-control.0.proxmox.updates.lastUpdate', // id des Datenpunktes
text: 'letztes Update', // text der angezeigt werden soll
icon: 'package-up', // icon das angezeigt werden soll
type: 'timestamp', // welche Funktion verwendet werden soll
}
]
}
]let vmList = [ // LXC / VM Liste
{
idChannel: 'proxmox.0.lxc.iobroker', // id des Channels der Node
targetChannel: 'lxc_ioBroker', // id unter der der json string für das Table Widget gespeichert werden soll
name: 'LXC - ioBroker', // name der als Titel angezeigt werden soll
image: '/vis.0/Bilder/Index/admin.png', // Bild das im Titel angezeigt werden soll
url: 'http://192.168.178.213:8081', // Url die aufgerufen wird beim Klick auf den Titel
custom: [ // andere Datenpunkte (nicht vom Proxmox Adapter) die mit aufgelistet werden sollen. Falls nicht benötigt, Array löschen
{
id: 'linux-control.0.iobroker.needrestart.needrestart', // id des Datenpunktes
text: 'Neustart notwendig', // text der angezeigt werden soll
icon: 'restart', // icon das angezeigt werden soll
type: 'boolean', // welche Funktion verwendet werden soll
attention: true // ob Attention Farbe angezeigt werden soll
},
{
id: 'linux-control.0.iobroker.updates.newPackages', // id des Datenpunktes
text: 'Updates', // text der angezeigt werden soll
icon: 'package-down', // icon das angezeigt werden soll
type: 'number', // welche Funktion verwendet werden soll
attention: true // ob Attention Farbe angezeigt werden soll
},
{
id: 'linux-control.0.iobroker.updates.lastUpdate', // id des Datenpunktes
text: 'letztes Update', // text der angezeigt werden soll
icon: 'package-up', // icon das angezeigt werden soll
type: 'timestamp', // welche Funktion verwendet werden soll
},
// {
// id: 'proxmox.0.lxc_ioBroker.folders.backup.container.lastChange', // id des Datenpunktes
// secondIds: [ // ids für subtext
// 'proxmox.0.lxc_ioBroker.folders.backup.container.files',
// 'proxmox.0.lxc_ioBroker.folders.backup.container.size'
// ],
// text: 'LXC Backup', // text der angezeigt werden soll
// icon: 'backup-restore', // icon das angezeigt werden soll
// type: 'timestamp'
// },
// {
// id: 'proxmox.0.lxc_ioBroker.folders.backup.data.lastChange', // id des Datenpunktes
// secondIds: [ // ids für subtext
// 'proxmox.0.lxc_ioBroker.folders.backup.data.files',
// 'proxmox.0.lxc_ioBroker.folders.backup.data.size'
// ],
// text: 'Daten Backup', // text der angezeigt werden soll
// icon: 'file-upload', // icon das angezeigt werden soll
// type: 'timestamp'
// },
// {
// id: 'proxmox.0.lxc_ioBroker.folders.ioBroker.size', // id des Datenpunktes
// text: 'Ordnergröße', // text der angezeigt werden soll
// icon: 'folder-information', // icon das angezeigt werden soll
// },
// {
// id: 'proxmox.0.lxc_ioBroker.folders.npm_cache.size', // id des Datenpunktes
// text: 'NPM Cache', // text der angezeigt werden soll
// icon: 'folder-clock', // icon das angezeigt werden soll
// }
]
},
/{
idChannel: 'proxmox.0.lxc.Proxy', // id des Channels der Node
targetChannel: 'lxc_Proxy', // id unter der der json string für das Table Widget gespeichert werden soll
name: 'LXC - proxy', // name der als Titel angezeigt werden soll
// image: '/vis.0/myImages/nextcloud-icon.png', // Bild das im Titel angezeigt werden soll
url: 'https://192.168.178.215', // Url die aufgerufen wird beim Klick auf den Titel
// custom: [ // andere Datenpunkte (nicht vom Proxmox Adapter) die mit aufgelistet werden sollen. Falls nicht benötigt, Array löschen
// {
// id: 'linux-control.0.lxc_NextCloud.needrestart.needrestart', // id des Datenpunktes
// text: 'Neustart notwendig', // text der angezeigt werden soll
// icon: 'restart', // icon das angezeigt werden soll
// type: 'boolean', // welche Funktion verwendet werden soll
// attention: true // ob Attention Farbe angezeigt werden soll
// },
// {
// id: 'linux-control.0.lxc_NextCloud.updates.newPackages', // id des Datenpunktes
// text: 'Updates', // text der angezeigt werden soll
// icon: 'package-down', // icon das angezeigt werden soll
// type: 'number', // welche Funktion verwendet werden soll
// attention: true // ob Attention Farbe angezeigt werden soll
// },
// {
// id: 'linux-control.0.lxc_NextCloud.updates.lastUpdate', // id des Datenpunktes
// text: 'letztes Update', // text der angezeigt werden soll
// icon: 'package-up', // icon das angezeigt werden soll
// type: 'timestamp', // welche Funktion verwendet werden soll
// },
// {
// id: 'linux-control.0.lxc_NextCloud.folders.backup.container.lastChange', // id des Datenpunktes
// secondIds: [ // ids für subtext
// 'linux-control.0.lxc_NextCloud.folders.backup.container.files',
// 'linux-control.0.lxc_NextCloud.folders.backup.container.size'
// ],
// text: 'LXC Backup', // text der angezeigt werden soll
// icon: 'backup-restore', // icon das angezeigt werden soll
// type: 'timestamp'
// },
// {
// id: 'linux-control.0.lxc_NextCloud.folders.userData.size', // id des Datenpunktes
// text: 'Benutzerdaten', // text der angezeigt werden soll
// icon: 'folder-account', // icon das angezeigt werden soll
// }
// ]
},/
{
idChannel: 'proxmox.0.qemu.RaspberryMatic', // id des Channels der Node
targetChannel: 'qemu_RaspiMatic', // id unter der der json string für das Table Widget gespeichert werden soll
name: 'VM - RaspiMatic', // name der als Titel angezeigt werden soll
image: '/vis.0/Bilder/GeraeteBatterien/raspberrymatic.png', // Bild das im Titel angezeigt werden soll
url: 'http://192.168.178.212/login.htm', // Url die aufgerufen wird beim Klick auf den Titel
},
]let fontSizePrimary = 20;
let fontSizeSecondary = 16;
let fontSizeTertiary = 14;
let fontSizeQuinary = 11;let fontFamilyPrimary = 'Roboto,sans-serif';
let fontFamilySecondary = 'RobotoCondensed-Regular';
let fontFamilyTertiary = 'RobotoCondensed-Light';
let fontFamilyQuaternary = 'RobotoCondensed-LightItalic';let colorPrimary = '#44739e';
let colorSecondary = 'gray';
let colorTertiary = '#44739e';let colorOnline = 'green';
let colorOffline = 'FireBrick';let colorGood = 'green';
let colorMedium = 'gold';
let colorBad = 'FireBrick';let iconColor = '#44739e'
let iconAttentionColor = '#f27935';let colCount = 24; // Anzahl der Spalten die im Widget eingestellt sind (+1 weil 0 im VIS Editor mitzählt)
let colSpanIcon = 3; // Anzahl der Spalten die für das icon verwendet werden soll
let colSpanText = 8; // Anzahl der Spalten die für den Text verwendet werden soll
let colSpanValueText = colCount - colSpanIcon - colSpanText;let rowHeight = 32;
let styleValue =
font-size: ${fontSizeTertiary}px; text-align: right; margin-right: 8px; font-family: ${fontFamilyTertiary}; color: ${colorTertiary};
let styleText =font-size: ${fontSizeSecondary}px; text-align: left; font-family: ${fontFamilySecondary}; color: ${colorPrimary}; height: ${rowHeight}px; line-height: ${rowHeight}px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;
let styleButtonText =font-size: ${fontSizeSecondary}px; text-align: left; font-family: ${fontFamilyTertiary}; color: ${colorPrimary}; margin-left: 2px; margin-right: 2px;
let iconLayout = {
type: "materialdesignicon",
mdwIconSize: 26,
colspan: colSpanIcon,
cellStyleAttrs: 'text-overflow: unset'
}let textLayout = {
type: "html",
width: "100%",
cellStyleAttrs: 'padding-left: 2px;',
colspan: colSpanText
}let valueTextLayout = {
type: "html",
width: "100%",
colspan: colSpanValueText,
}let progressBarLayout = {
type: "progress",
width: "100%",
height:${rowHeight}px
,
showValueLabel: true,
textAlign: "end",
colorProgress: colorGood,
colorOneCondition: 69,
colorOne: colorMedium,
colorTwoCondition: 89,
colorTwo: colorBad,
progressRounded: false,
verticalAlign: 'top',
textFontSize: fontSizeTertiary,
textFontFamily: fontFamilyTertiary,
colspan: colSpanValueText
}let progressBarCpuLayout = {
type: "progress",
width: "100%",
height:${rowHeight / 2}px
,
showValueLabel: true,
textAlign: "end",
colorProgress: colorGood,
colorOneCondition: 69,
colorOne: colorMedium,
colorTwoCondition: 89,
colorTwo: colorBad,
progressRounded: false,
textFontSize: fontSizeTertiary,
textFontFamily: fontFamilyTertiary,
colspan: colSpanValueText
}let temperatureMaxValue = 90;
let progressBarTemperaturLayout = {
type: "progress",
width: "100%",
min: 0,
max: temperatureMaxValue,
showValueLabel: true,
textAlign: "end",
colorProgress: colorGood,
colorOneCondition: 59 / temperatureMaxValue * 100,
colorOne: colorMedium,
colorTwoCondition: 69 / temperatureMaxValue * 100,
colorTwo: colorBad,
progressRounded: false,
textFontSize: fontSizeTertiary,
textFontFamily: fontFamilyTertiary,
colspan: colSpanValueText,
valueLabelStyle: 'progressCustom'
}let buttonControlLayout = {
type: "buttonState",
width: "100%",
height: "40px",
buttonStyle: "text",
vibrateOnMobilDevices: 50,
iconPosition: "left",
iconHeight: "20",
labelWidth: "",
autoLockAfter: 5,
lockEnabled: true,
lockIconColor: "FireBrick",
}let statusSeperator = {
type: "html",
width: "100%",
colspan: colCount
}let iconButtonControlLayout = {
type: "buttonState_icon",
width:${rowHeight}px
,
height:${rowHeight}px
,
imageColor: colorPrimary,
vibrateOnMobilDevices: "50",
autoLockAfter: "5",
lockIconTop: "32",
lockIconLeft: "30",
lockIconSize: "12",
lockIconColor: "red",
lockFilterGrayscale: "30",
image: "update",
iconHeight: "26",
lockEnabled: true,
lockIconBackground: "white",
lockBackgroundSizeFactor: "1.1"
}
// **********************************************************************************************************************************************************************//import
const mathjs = require("mathjs");
const moment = require("moment");
const momentDurationFormatSetup = require("moment-duration-format");
moment.locale("de");// Trigger
on({ id: triggerDatenpunkt, change: 'any' }, updateData);function updateData() {
for (const node of nodesList) { updateVm(node, true); } for (const vm of vmList) { updateVm(vm); }
}
function updateVm(vm, isNode = false) {
try {
let table = [];if (existsObject(`${vm.idChannel}`)) { let channel = getObject(`${vm.idChannel}`) if (channel && channel.common && channel.common.name) { let row = {}; if (vm.url) { row.button = { type: "buttonLink", href: vm.url, openNewWindow: true, width: "100%", height: "46px", buttonStyle: "text", vibrateOnMobilDevices: "50", iconPosition: "right", image: vm.image, iconHeight: "40", labelWidth: "100", buttontext: `<div style="font-family: ${fontFamilyPrimary}; font-size: ${fontSizePrimary}px; font-weight: 500; letter-spacing: .0125em; text-decoration: inherit; text-align: left;">${vm.name}</div>`, colspan: colCount, } } else { row.title = { type: "html", width: "100%", height: "46px", html: `<div style="display: flex; padding: 0 8px 0 8px; align-items: center;"> <div style="flex: 1; font-family: ${fontFamilyPrimary}; font-size: ${fontSizePrimary}px; color: ${colorPrimary}; font-weight: 500; letter-spacing: .0125em; text-decoration: inherit; text-align: left;">${vm.name}</div> <img class="materialdesign-icon-image" src="${vm.image}" style="width: auto; height: 40px; ;"> </div>`, colspan: colCount, cellStyleAttrs: 'height: 49px;' } } table.push(row) } table.push({ seperator: { type: "html", width: "100%", cellStyleAttrs: 'top: -3px; position: relative;', html: `<hr style="color: ${colorPrimary}; background-color: ${colorPrimary}; border-width: 0; height: 2px; margin-top: 0; margin-bottom: 0;">`, colspan: colCount } }) } else { logDpNotExist(vm.targetChannel, `${vm.idChannel}`); } generateUptimeRow(`${vm.idChannel}.uptime`, table, vm) if (vm.custom && vm.custom.length > 0) { for (const dp of vm.custom) { generateCustomRow(dp, table, vm); } } generateProgressBarCpuRow(`${vm.idChannel}.cpu`, table, vm, isNode); generateProgressBarTemperatures(vm.temperatures, table, vm); if (!isNode) { generateProgressBarRow(`${vm.idChannel}.mem_lev`, table, vm, "memory", 'Arbeitsspeicher', getUsedOfText(`${vm.idChannel}.mem`, `${vm.idChannel}.maxmem`, vm.targetChannel)); generateProgressBarRow(`${vm.idChannel}.disk_lev`, table, vm, "harddisk", 'Local', getUsedOfText(`${vm.idChannel}.disk`, `${vm.idChannel}.maxdisk`, vm.targetChannel)); } else { generateProgressBarRow(`${vm.idChannel}.memory.used_lev`, table, vm, "memory", 'Arbeitsspeicher', getUsedOfText(`${vm.idChannel}.memory.used`, `${vm.idChannel}.memory.total`, vm.targetChannel)); generateProgressBarRow(`${vm.idChannel}.swap.used_lev`, table, vm, "folder-swap", 'SWAP', getUsedOfText(`${vm.idChannel}.swap.used`, `${vm.idChannel}.swap.total`, vm.targetChannel)); if (vm.storages) { for (const storage of vm.storages) { generateProgressBarRow(`${storage.idChannel}.used_lev`, table, vm, storage.icon, storage.text, getUsedOfText(`${storage.idChannel}.used`, `${storage.idChannel}.total`, vm.targetChannel)); } } } // generateStatusBar(`${vm.idChannel}.status`, table, vm, 'top: 3px; position: relative;'); table.push({ seperator: Object.assign({ html: `<hr style="background: transparent; border-width: 0; height: 1px;margin-top: 0; margin-bottom: 0;">`, }, statusSeperator) }) if (vm.showControlButtons || vm.showControlButtons === undefined) { let btnIds = []; let btnRow = {}; if (existsObject(`${vm.idChannel}.start`)) { btnIds.push({ id: `${vm.idChannel}.start`, text: 'start' }); } if (existsObject(`${vm.idChannel}.reboot`)) { btnIds.push({ id: `${vm.idChannel}.reboot`, text: 'neustart' }); } if (existsObject(`${vm.idChannel}.shutdown`)) { btnIds.push({ id: `${vm.idChannel}.shutdown`, text: 'stop' }); } for (var i = 0; i <= btnIds.length - 1; i++) { let id = btnIds[i].id; btnRow[`btn${i}`] = Object.assign( { oid: id, value: true, buttontext: `<div style="${styleButtonText}">${btnIds[i].text}</div>`, image: "play-circle-outline", colspan: colCount / btnIds.length }, buttonControlLayout); } table.push(btnRow); } // generateStatusBar(`${vm.idChannel}.status`, table, vm, 'top: -3px; position: relative;'); mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}.${isNode ? 'node' : 'vm'}.${vm.targetChannel}.jsonTable`, JSON.stringify(table), 'string', 'JSON string für Tabellen Widget'); } catch (ex) { console.error(`[updateVm - ${vm.targetChannel}] error: ${ex.message}, stack: ${ex.stack}`); }
}
function generateUptimeRow(id, table, vm) {
let row = {};row.icon = Object.assign({ mdwIcon: "clock-check-outline", mdwIconColor: iconColor }, iconLayout) row.text = Object.assign({ html: `<div style="${styleText}">Betriebszeit</div>` }, textLayout); if (existsState(id)) { let duration = moment.duration(getState(id).val * 1000); let durationText = duration.format('D [Tage] h [Std. und] m [Min.]'); if (duration.asDays() <= 2) { durationText = duration.format('D [Tag] h [Std. und] m [Min.]'); } row.value = Object.assign({ html: `<div style="${styleValue}">${durationText}</div>` }, valueTextLayout); } else { logDpNotExist(vm.targetChannel, id); row.value = Object.assign({ html: `<div style="${styleValue}; color: red;">N/A</div>` }, valueTextLayout); } table.push(row);
}
function generateCustomRow(dp, table, vm) {
let row = {};
row.icon = Object.assign({ mdwIcon: dp.icon, mdwIconColor: iconColor }, iconLayout);if (!dp.secondIds) { row.text = Object.assign({ html: `<div style="${styleText}">${dp.text}</div>` }, textLayout); } else { let secondText = []; for (const id of dp.secondIds) { if (existsState(id)) { let obj = getObject(id); let unit = ''; if (obj && obj.common && obj.common.unit) { unit = ' ' + obj.common.unit; } secondText.push(getState(id).val + unit); } else { logDpNotExist(vm.targetChannel, id); secondText.push('N/A'); } } row.text = Object.assign({ html: getHtmlTwoLines(dp.text, secondText.join(', ')) }, textLayout); } if (existsState(dp.id)) { let val = getState(dp.id).val; let obj = getObject(dp.id); let unit = ''; if (obj && obj.common && obj.common.unit) { unit = obj.common.unit } if (!dp.type) { if (obj.common && obj.common.type === 'number') { row.value = Object.assign({ html: `<div style="${styleValue}">${formatValue(val, undefined, '.,')} ${unit}</div>` }, valueTextLayout); } else { row.value = Object.assign({ html: `<div style="${styleValue}">${val} ${unit}</div>` }, valueTextLayout); } } else if (dp.type === 'timestamp') { row.value = Object.assign({ html: `<div style="${styleValue}">${getFormattedTimeStamp(val)}</div>` }, valueTextLayout); } else if (dp.type === 'timestampInSeconds') { row.value = Object.assign({ html: `<div style="${styleValue}">${getFormattedTimeStamp(val * 1000)}</div>` }, valueTextLayout); } else if (dp.type === 'boolean') { row.value = Object.assign({ html: `<div style="${styleValue}">${val ? 'ja' : 'nein'}</div>` }, valueTextLayout); if (dp.attention && val) { row.icon = Object.assign({ mdwIcon: dp.icon, mdwIconColor: iconAttentionColor }, iconLayout); } } else if (dp.type === 'number') { row.value = Object.assign({ html: `<div style="${styleValue}">${val > 0 ? `${val} ${unit}` : 'nein'}</div>` }, valueTextLayout); if (dp.attention && val > 0) { row.icon = Object.assign({ mdwIcon: dp.icon, mdwIconColor: iconAttentionColor }, iconLayout); } } } else { logDpNotExist(vm.targetChannel, dp.id); row.value = Object.assign({ html: `<div style="${styleValue}; color: red;">N/A</div>` }, valueTextLayout); } table.push(row);
}
function generateProgressBarTemperatures(idList, table, vm) {
if (idList && idList.length > 0) {
let row = {};row.icon = Object.assign({ mdwIcon: "thermometer", rowspan: idList.length, mdwIconColor: iconColor }, iconLayout); row.text = Object.assign({ html: `<div style="${styleText}">Temperatur</div>`, rowspan: idList.length }, textLayout); if (idList[0] && existsState(idList[0])) { row.progressBar = Object.assign({ oid: idList[0], valueLabelCustom: '[#value] °C', textColor: colorTertiary, verticalAlign: 'bottom', height: `${rowHeight / idList.length}px`, cellStyleAttrs: `line-height: ${rowHeight / idList.length}px; padding-bottom: 0;` }, progressBarTemperaturLayout); } else { logDpNotExist(vm.targetChannel, idList[0]); row.progressBar = Object.assign({ valueLabelCustom: 'N/A', textColor: colorTertiary, verticalAlign: 'bottom', height: `${rowHeight / idList.length}px`, cellStyleAttrs: `line-height: ${rowHeight / idList.length}px; padding-bottom: 0;` }, progressBarTemperaturLayout); } table.push(row); if (idList.length === 2) { if (idList[1] && existsState(idList[1])) { table.push({ temp: Object.assign({ oid: idList[1], valueLabelCustom: '[#value] °C', textColor: colorTertiary, verticalAlign: 'bottom', height: `${rowHeight / idList.length}px`, cellStyleAttrs: `line-height: ${rowHeight / idList.length}px; padding-bottom: 0;` }, progressBarTemperaturLayout) }); } else { logDpNotExist(vm.targetChannel, idList[1]); table.push({ temp: Object.assign({ valueLabelCustom: 'N/A', textColor: colorTertiary, verticalAlign: 'bottom', height: `${rowHeight / idList.length}px`, cellStyleAttrs: `line-height: ${rowHeight / idList.length}px; padding-bottom: 0;` }, progressBarTemperaturLayout) }); } } }
}
function generateProgressBarCpuRow(id, table, vm, isNode = false) {
let row = {};
row.icon = Object.assign({ mdwIcon: "cpu-64-bit", rowspan: 2, mdwIconColor: iconColor }, iconLayout);
row.text = Object.assign({ html:<div style="${styleText}">CPU</div>
, rowspan: 2 }, textLayout);if (existsState(id)) { calculateCpuAverage(vm.targetChannel, getState(id).val, isNode); let cpuAverageId = `${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}.${isNode ? 'node' : 'vm'}.${vm.targetChannel}.cpuAverage` row.progressBar = Object.assign({ oid: id, textColor: colorTertiary, verticalAlign: 'bottom', cellStyleAttrs: `line-height: ${rowHeight / 2}px; padding-bottom: 0;` }, progressBarCpuLayout); table.push(row); if (existsState(cpuAverageId)) { table.push({ cpu: Object.assign({ oid: cpuAverageId, valueLabelStyle: 'progressCustom', valueLabelCustom: 'Ø [#value] %', textColor: colorTertiary, verticalAlign: 'top', cellStyleAttrs: `line-height: ${rowHeight / 2}px; padding-top: 0;` }, progressBarCpuLayout) }); } else { logDpNotExist(vm.targetChannel, cpuAverageId); table.push({ cpu: Object.assign({ valueLabelStyle: 'progressCustom', valueLabelCustom: 'N/A', textColor: 'red', verticalAlign: 'top', cellStyleAttrs: `line-height: ${rowHeight / 2}px; padding-top: 0;` }, progressBarCpuLayout) }); } } else { logDpNotExist(vm.targetChannel, id); row.progressBar = Object.assign({ valueLabelStyle: 'progressCustom', valueLabelCustom: 'N/A', textColor: 'red', verticalAlign: 'bottom', cellStyleAttrs: `line-height: ${rowHeight / 2}px; padding-bottom: 0;` }, progressBarCpuLayout); table.push(row); table.push({ cpu: Object.assign({ valueLabelStyle: 'progressCustom', valueLabelCustom: 'N/A', textColor: 'red', verticalAlign: 'top', cellStyleAttrs: `line-height: ${rowHeight / 2}px; padding-top: 0;` }, progressBarCpuLayout) }); }
}
function generateProgressBarRow(id, table, vm, icon, textOne, textTwo) {
let row = {};
row.icon = Object.assign({ mdwIcon: icon, mdwIconColor: iconColor }, iconLayout);if (existsState(id)) { row.text = Object.assign({ html: getHtmlTwoLines(textOne, textTwo) }, textLayout); row.progressBar = Object.assign({ oid: id, textColor: colorTertiary }, progressBarLayout); } else { logDpNotExist(vm.targetChannel, id); row.text = Object.assign({ html: `<div style="${styleText}">${textOne}</div>` }, textLayout); row.progressBar = Object.assign({ valueLabelStyle: 'progressCustom', valueLabelCustom: 'N/A', textColor: 'red', }, progressBarLayout); } table.push(row);
}
function generateStatusBar(id, table, vm, cellStyleAttrs) {
if (getObject(id)) {
let statusColor = getState(id).val === 'running' ? colorOnline : colorOffline;
table.push({
seperator: Object.assign({
cellStyleAttrs: cellStyleAttrs,
html:<hr style="background: linear-gradient(90deg, transparent 0%, ${statusColor} 30%, ${statusColor} 50%, ${statusColor} 70%, transparent 100%); border-width: 0; height: 1px;margin-top: 0; margin-bottom: 0;">
,
}, statusSeperator)
})
} else {
logDpNotExist(vm.targetChannel, id);
}}
function getFormattedTimeStamp(val) {
let now = moment();
let daysDiff = now.startOf('day').diff(moment(val).startOf('day'), 'days');let timeFormated = moment(val).format('ddd DD.MM. - HH:mm'); if (daysDiff === 0) { timeFormated = `Heute - ${moment(val).format('HH:mm')}`; } else if (daysDiff === 1) { timeFormated = `Gestern - ${moment(val).format('HH:mm')}`; } else if (daysDiff > 1 && daysDiff <= 6) { timeFormated = `vor ${daysDiff} Tagen - ${moment(val).format('HH:mm')}`; } else if (daysDiff === 7) { timeFormated = `vor einer Woche - ${moment(val).format('HH:mm')}`; } return timeFormated;
}
function calculateCpuAverage(targetChannel, val, isNode = false) {
let id =${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}.${isNode ? 'node' : 'vm'}.${targetChannel}.cpuLastValues
;try { if (existsState(id)) { let letzteWerte = getState(id).val; letzteWerte = letzteWerte.toString().split(','); if (val > 0) { letzteWerte.unshift(val); } else { letzteWerte.unshift(0); } if (letzteWerte.length > cpuAverageLastValues) { letzteWerte.splice(cpuAverageLastValues); } setState(id, letzteWerte.join(','), true); let sum = 0; for (const value of letzteWerte) { sum = sum + parseFloat(value); } mySetState(`${idDatenpunktPrefix}.${idDatenPunktStrukturPrefix}.${isNode ? 'node' : 'vm'}.${targetChannel}.cpuAverage`, mathjs.round(sum / letzteWerte.length, 0), 'number', 'Durchschnittle CPU Last'); } else { mySetState(id, val.toString(), 'string', 'Durchschnittle CPU Last letzte 60 Werte'); } } catch (err) { console.error(`[calculateCpuAverage] '${id}' - error: ${err.message}, stack: ${err.stack}`); }
}
function mySetState(id, val, type, name, write = false) {
if (existsState(id)) {
setState(id, val, true);
} else {
createState(id, {
'name': name,
'type': type,
'read': true,
'write': write
}, function () {
setState(id, val, true);
});
}
}function getUsedOfText(usedId, totalId, targetChannel) {
let text = 'N/A'let used = existsState(usedId) ? getState(usedId).val : logDpNotExist(targetChannel, usedId); let total = existsState(totalId) ? getState(totalId).val : logDpNotExist(targetChannel, totalId); if (used && total) { text = `${formatValue(used / 1024, 2, '.,')} GB / ${formatValue(total / 1024, 0, '.,')} GB` } return text;
}
function getHtmlTwoLines(text1, text2) {
return<div style="font-size: ${fontSizeSecondary}px; text-align: left; font-family: ${fontFamilySecondary}; color: ${colorPrimary}; line-height: 1.2; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;">${text1}</div> <div style="font-size: ${fontSizeQuinary}px; text-align: left; font-family: ${fontFamilyQuaternary}; color: ${colorSecondary}; line-height: 1.2">${text2}</div>
}function logDpNotExist(target, id) {
console.warn([updateVm - ${target}] datapoint '${id}' not exist!
);
}// Bei JS Start ausführen
updateData();Aber das Skript ist jetzt nicht essentiell wichtig. Notfalls schalt ich das ab bis ich wieder da bin.
-
@uv-on-fire Das mit mathjs wird in der nächsten javascript Adapter Version behoben sein (>8.6.0 sobald verfügbar)