Autor Thema: [HMinfoTools.js] neu: die grosse schwester von hm.js  (Gelesen 31058 mal)

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
[HMinfoTools.js] neu: die grosse schwester von hm.js
« am: 12 Juli 2020, 12:28:10 »
moin,
anbei ein webui für hminfo.


Anleitung:
- HMinfoTools ist auf der detailseite des hminfo devices über den internals sichtbar.
  hat hminfo noch keine fehlerhaften entities erkannt, zb nach fhem restart bis zum ersten hminfo update,
  ist nur eine "leere" tabelle zu sehen. siehe sreenshot hminfotools01.png.
  ein beispiel mit einer "vollen" tabelle zeigt screenshot hminfotools02.png.

- zusätzlich ist es möglich HMinfoTools auf raumseiten anzuzeigen, zb mit einem weblink device:
  defmod my_weblink weblink htmlCode <table><tbody><tr><td id="hminfotools_weblink" dev="hminfo"></td></tr></tbody></table>  der name des weblink devices (my_weblink) ist beliebig,
  die id des td-elementes ist zwingend einzuhalten,
  das attribut dev="hminfo" des td-elementes muss den namen des hminfo devices bekommen.


- es werden alle devices gelistet, bei denen hminfo fehler erkannt hat.
  siehe hminfo internals (iCRI_..., iERR_..., iW_...).
- die reihenfolge entspricht der unter hminfo internals.

- HMinfoTools aktualisiert sich automatisch bei erkannten fehleränderungen.
  dazu werden die events des hminfo readings "lastErrChange" genutzt.
  damit hminfo automatische updates initiiert, muss das attribut autoUpdate gesetzt werden.
  "attr hminfo autoUpdate 00:10" updatet zb alle 10 minuten.
  alternativ kann jederzeit ein manuelles update ausgeführt werden: "set hminfo update".

- bis auf das rssi-icon unterstützen alle icons longpoll.
  das rssi-icon wird bei jeder HMinfoTools aktualisierung neu berechnet.

- attr longpoll=websocket für das verwendete fhem webdevice ist sicherlich zu empfehlen,
  da es je nach anzahl der devices zu erheblichem datenaustausch kommen kann.
- zur reduzierung des traffics zwischen server und browser sollte, wie überall grundsätzlich empfohlen,
  bei allen devices das "attr event-on-change-reading .*" für alle readings genutzt werden.


Weitere Infos:
- hinweise zur installation eines js-files sind bei hm.js zu finden: https://forum.fhem.de/index.php/topic,106959.0.html.
- funktionen über die genutzten icons sind hier zu finden: https://forum.fhem.de/index.php/topic,112156.0.html.
- verwendung auch ohne hm.js möglich.



die aktuelle version ist hier im anhang zu finden.

History:
  • rev 1000 12.07.2020
    • new: prototyp
  • rev 1001 14.07.2020
    • new: error-entity-tabelle mit autoupdate
    • new: deutliche traffic reduzierung
  • rev 1002 15.07.2020
    • fix: startet wieder automatisch nach fhem restart
  • rev 1003 19.07.2020
    • new: zusätzliche anzeige von HMinfoTools auf raumseiten möglich
  • rev 1004 24.07.2020
    • new: HMinfoTools bietet nun bis zu 7 status-icons für jede entity
  • rev 1005 27.07.2020
    • new: massnahmen gegen laufzeitfehler integriert
    • new: HMinfoTools hat eine kopfzeile bekommen
  • rev 1006 05.08.2020
    • new: csrfToken änderungen werden unterstützt
    • new: io-namen in der kopfzeile sind entsprechend dem status eingefärbt und haben einen link
    • new: die anwendung als weblink ist nun auf beliebigen raumseiten möglich
    • fix: "connection lost"-probleme mit firefox/websocket verbessert
  • rev 1007 06.08.2020
    • new: neue icons für motorErr und smoke_detect
    • new: sabotageAttack icon mit animation
  • rev 1008 06.08.2020
    • new: click funktion für icon battery: dialog zum anhängen eines textes an das attribut comment bei batterie-wechsel
    • new: click funktion für icon cfgState: "set <parentDevice> getConfig"
  • rev 1009 03.09.2020
    • fix: fehlerbeseitigung für devices mit nicht gesetztem attr IODev
  • rev 1010 25.03.2021
    • new: 4 globale icon-click-funktionen
    • new: request reduzierung
    • fix: "connection lost" verbesserung
« Letzte Änderung: 25 März 2021, 23:42:08 von frank »
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #1 am: 12 Juli 2020, 12:58:18 »
@matinp876

hallo martin,

für eine automatische aktualisierung der device tabelle könnte ich einen neuen trigger gebrauchen.
dieser sollte signalisieren, dass sich entweder die liste der entities geändert hat, und/oder die fehlerkategorien einer entitie.

am schönsten wäre eine liste mit den entities inklusive deren aktuellen fehlerkategorien.
zb, wenn es 3 devices mit fehlern gibt, die zum teil in mehreren fehlerkategorien auftauchen:

errorDevices => "device1:cat1,cat2,cat4 device2:cat2,cat4 device3:cat1"
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Offline martinp876

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 11023
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #2 am: 12 Juli 2020, 15:44:35 »
Mal auf die Schnelle laut denken:
Einen trigger erhältst du, wenn sich die Anzahl der Einträge einer Kategorie andert.

Die Liste der entities ist in internals da man hier einen link zur entity erhält.

Info level wird nicht detailiert.
Configcheck könnte man als warning addieren.
Im übrigen sind die Kriterien vom user einstellbar. Allerdings nicht der level (Err Warning).

Unzureichend könnte nun sein, das in internals der inhalt des readings nicht angezeigt wird. Das ist nur in den readings zu sehen.... Sollte ich verbessern.

Die entities erhältst du aus den internals eigentlich recht einfach.
Eine Auflistung nach devices könnte ich als get implementieren.
Als trigger wäre dann ein reading lastChange <date> möglich

Deine angeforderte devicelists will ich nicht, da es eine endlose zeile ergibt, welch immer schlecht/nicht lesbar ist. Genau das wollte ich verhindern.

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #3 am: 12 Juli 2020, 17:15:08 »
ich denke, ich muss noch mal präzisieren, damit wir das selbe meinen. vor allem die begriffe: entity, device und channel.

1. ich erzeuge die tabelle aus den in den internals (CRI, ERR, W) vorhandenen namen. da hier sowohl namen von parent-devices (DEF=6-stellig) auftauchen, als auch namen von channel-devices (DEF=8stellig), spreche ich ab jetzt von der "entity-tabelle" oder liste.
ich hatte von device-tabelle gesprochen, da es alles fhem devices sind.

2. der trigger soll ein aktualisierung dieser entity-tabelle auslösen, wenn es eine änderung der entities gibt.

3. ich habe nun gesehen, dass sich in der detail ansicht von hminfo teilweise sogar die internals ändern, wenn gleichzeitig ein reading updatet. eventuell wenn readingname und internalname identisch sind.
das kannte ich noch nicht.

ausserdem ändern sich readings scheinbar auch zwischen den hminfo-updates. bisher dachte ich, das passiert nur bei einem hminfo-update.

sehr verwirrend.
ich muss jetzt erst mal untersuchen, ob die automatischen internals änderungen zu diesem zeitpunkt auch wirklich im internal existieren. also auch in einem list oder jsonlist2 vorhanden sind.

4.
Zitat
Eine Auflistung nach devices könnte ich als get implementieren.
wenn schon, dann bräuchte ich ein get für eine entity-liste. siehe oben.

das ist aber nicht nötig.
wenn es das lastChange reading "nur" mit timestamp gibt, ist das vollkommen ok.
da ich dann aber sowieso einen request machen muss, hole ich mir lieber gleich ein jsonlist2 von hminfo und bekomme damit alle internals, readings und attribute auf einmal.

der vorteil, wenn die "benötigten" daten bereits über longpoll automatisch kommen, wäre halt, einen request einzusparen.

für die longpoll unterstützung der icons werden alle events für jede entity der liste gepollt, plus events des zugehörigen parent devices für channel entities, plus hminfo events.

5. eine neue config fehler-kategorie wäre wirklich gut.
« Letzte Änderung: 12 Juli 2020, 17:41:14 von frank »
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Online Pfriemler

  • Hero Member
  • *****
  • Beiträge: 3940
  • geht nich gips nich
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #4 am: 12 Juli 2020, 18:52:34 »
Ich werde mich mal wieder gleich ins Testgetümmel stürzen.

Liebe Leuts, lieber Martin insbesondere,

ich fände, dass diese beiden Erweiterungen (mindestens aber hm.js) sich ein Pinning im Homematic-Forum verdient haben!
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Offline martinp876

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 11023
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #5 am: 12 Juli 2020, 20:35:46 »
hier einmal zum Testen.

hm.js sollte in contribute abgelegt werden - besser zu finden.

Online Pfriemler

  • Hero Member
  • *****
  • Beiträge: 3940
  • geht nich gips nich
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #6 am: 13 Juli 2020, 11:56:59 »
HMinfoTools.js nach www/pgm2 (wo auch hm.js liegt), Attribut JavaScript in der FHEMWEB-Instanz wie für hm.js ergänzt, Martins 98_HMinfo.pm aus dem Beitrag nach FHEM und reload - in hminfo tut sich nichts.
Auch nicht nach einem Neustart. Habe ich was übersehen? hm.js funtkioniert nach wie vor.
edit: geht auch nicht mit der alten 98_HMinfo.pm. Nur dafür wesentlich weniger Fehlermeldungen im Log.
Ich hatte übrigens keine Probleme mit der 98_HMinfo.pm #22387 nach Neustarts.
« Letzte Änderung: 13 Juli 2020, 13:33:59 von Pfriemler »
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #7 am: 13 Juli 2020, 13:35:27 »
Zitat
HMinfoTools.js nach www/pgm2 (wo auch hm.js liegt), Attribut JavScript in der FHEMWEB-Instanz wie für hm.js ergänzt
genau richtig.
mit einem neuen js-file muss man immer auch die browserseiten refreshen ("Strg + R" bei firefox), damit die aktuelle seite sich die js-files neu einliesst.
bei chrome im handy lösche ich sogar zuerst alle fhem-tabs.


HMinfoTools.js aus dem start post funktioniert nur mit der "normalen" 98_hminfo.pm.

für die von martin hier angehängte hminfo.pm muss ich erst anpassung vornehmen.
ein erster versuch ist diesem post angehängt.
diese version funktioniert dann nur mit der von martin angehängten hminfo.pm.


ohne attr autoUpdate musst du eventuell erst "set hminfo update" ausführen, damit in hminfo etwas passiert.

oder bei dir gibt es keine fehler in den devices.  8)
« Letzte Änderung: 01 März 2021, 13:40:04 von frank »
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Online Pfriemler

  • Hero Member
  • *****
  • Beiträge: 3940
  • geht nich gips nich
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #8 am: 13 Juli 2020, 16:16:48 »
Ich hasse das! Siehe letzter Satz meiner Sig.  :-[
Ich hatte auch schon vorher einige ERR_ in hminfo. Komisch. Wie auch immer. Natürlich geht jetzt alles.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #9 am: 13 Juli 2020, 18:02:04 »
hier einmal zum Testen.

sieht gut aus.

- readings werden wohl nur noch bei hminfo_update updated.
- internals bleiben mit angepasstem namen ruhig.
- lastErrChange sieht auch gut aus.
- keine warnings im log.


kleinigkeiten:

1. zu viele events bei speziellen readings

ich habe bei mir jetzt alle event attribute gelöscht.
es macht dann den eindruck, dass es grundsätzlich in hminfo nur events bei change geben soll. richtig?

allerdings feuern diese readings bei jedem update, auch ohne change, immer dann, wenn der value=0 ist.
sobald ein "echter" value existiert, feuern sie nur bei change. :
- CRI__protocol
- W__protocol
- ERR_valveCtrl (eigenes reading über attr sumERROR)

komischer weise passiert dies nicht bei I_autoReadPend=0


2. kein einheitlicher internals name bei W__protocol

ERR__protocol wird zu iERR__protocol => logisch
W__protocol wird aber zu iW__protoNames => besser wäre hier iW__protocol


3. falsche kategorie und ebenfalls kein einheitlicher internals name für ERR__unreachable

ERR__unreachable wird zu iW__unreachNames => besser wäre hier iERR__unreachable.



fragen:

welche logik verbirgt sich eigentlich hinter der anzahl der "underscore" zeichen bei den fehler kategorien?
zb hat protocol immer 2 underscore, egal ob W, ERR oder CRI. macht ja sinn.
alle fehlerreadings aus dem attribut sumERROR bekommen wohl nur einen underscore.

warum hat nun iERR___rssiCrit 3 underscore?
es wird ja wohl aus einem I_ reading abgeleitet.

die eigentliche frage ist aber, ob du mit der anzahl der underscore quasi einen zusätzlichen level innerhalb einer kategorie charakterisieren möchtest?

wenn ja, habe ich den eindruck, dass eventuell 1 underscore der höchste level sein soll und 3 underscore der niedrigste.
wenn das auch stimmt, wäre es aber besser level 1 und level 3 quasi zu tauschen, damit sie in der reihenfolge der wichtigkeit nach in den internals dargestellt/sortiert sind. somit dann auch in HMinfoTools.

also die wichtigsten fehler mit den meisten underscore zeichen markieren.


edit:

noch ein kleiner wunsch zum schluss.  ;)

wäre es möglich, in parent devices ein neues internal ein zu fügen, in dem die modes des devices enthalten sind?
ich weiss, dass ich es auch unter get deviceInfo finden kann.
wenn es aber in einem internal stehen würde, könnte ich dutzende requests einsparen, da das internal dann automatisch in einem jsonlist2 mitkommen würde, das ich eh schon anfrage.

ich möchte ein CMDs_pending in commState für zb config devices spezieller darstellen, weil hier ja ein manueller eingriff zwingend erforderlich ist (knöpfchen drücken).
« Letzte Änderung: 13 Juli 2020, 18:21:28 von frank »
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #10 am: 14 Juli 2020, 23:14:34 »
neues update im ersten post.

rev 1001 14.07.2020
    new: error-entity-tabelle mit autoupdate
    new: deutliche traffic reduzierung


cmds_pending blinkt jetzt.  8)
was sagt safari dazu?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Online Pfriemler

  • Hero Member
  • *****
  • Beiträge: 3940
  • geht nich gips nich
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #11 am: 15 Juli 2020, 11:18:26 »
Also ich bekomme beim Aufruf von hminfo nach einem Neustart (edit) die HMInfoTools erst angezeigt, wenn ich "set hminfo update" schicke und dann die Seite im Browser reloade. Beides sollte unnötig sein. ? Jetzt im laufenden Betrieb geht es dann. Ich werde das mal weiter untersuchen.
« Letzte Änderung: 15 Juli 2020, 11:20:31 von Pfriemler »
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #12 am: 15 Juli 2020, 18:13:41 »
Also ich bekomme beim Aufruf von hminfo nach einem Neustart (edit) die HMInfoTools erst angezeigt, wenn ich "set hminfo update" schicke und dann die Seite im Browser reloade.

HMInfoTools sammelt fehler aus den internals von hminfo ein und zeigt diese dann an.
diese sind nach restart aber noch nicht vorhanden, sondern erst nach hminfo update, entweder manuell oder automatisch nach etwa der zeit, die in attr autoupdate eingestellt ist. also ggf warten.

das erste automatische hminfo update nach fhem restart könnte martin sicherlich vorziehen, je nach einstellung von attr autoUpdate.

zumindestens startet HMInfoTools ab jetzt automatisch, wenn das erste update mit fehlern kommt.
ein früheres hminfo update, sollte martin initiieren.


@all
neues update im ersten post.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Online frank

  • Hero Member
  • *****
  • Beiträge: 10405
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #13 am: 16 Juli 2020, 22:47:56 »
hallo martin,

1. sabotageAttack fehler "verschwinden" nach fhem restart. readings im device bleiben bestehen.
erst neue attacks erzeugen wieder einen "CRI_protocol" fehler.

2. frage zu "set device clear msgEvents"

ist es richtig, dass der befehl auch die protocol fehler löscht?
da es ja mittlerweile auch "set clear msgError" gibt, hätte ich vermutet, dass die fehler nicht auch über clear msgEvents gelöscht werden.

"set device clear msgEvents" kann durch klick auf die led's ausgelöst werden.
leider verschwinden dann die entities aus der liste.

3. "set hminfo cmdRequestG ping" pingt auch ignored devices an, die dann in der fehlerliste erscheinen.
das sollte nicht sein, denke ich.
« Letzte Änderung: 16 Juli 2020, 22:56:27 von frank »
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [hm.js]: https://forum.fhem.de/index.php/topic,106959.0.html

Offline Knallkopp_02

  • Full Member
  • ***
  • Beiträge: 208
Antw:[HMinfoTools.js] neu: die grosse schwester von hm.js
« Antwort #14 am: 19 Juli 2020, 10:26:53 »
Hallo liebe Programmierer,

Ich bin noch im Anfangsstatium, was händische Einfügen von irgendwelchen Scripten angeht, und möchte nocheinmal nachfragen, ob ich alles richtig verstanden habe, was ich machen muss, damit alles läuft.

Ein HMInfo Device habe ich schon definiert und das läuft auch.
Jetzt lade ich mir HMinfoTools.js  herunter und packe es in den Ordner www/pgm2 und gehe dann die Schritte 0.1 - 0.4 der Anleitung zum hm.js durch mit den entsprechenden Anpassungen.
Wiedersprüchlich ist die Aussage, das ich die hm.js brauche oder nicht?

Soweit habe ich das nun alles gemacht, bekomme aber auf der Detailseite nicht mehr angezeigt als vorher.

Gruß Knallkopp_02
« Letzte Änderung: 19 Juli 2020, 10:42:05 von Knallkopp_02 »
Ich bin kein Programmierer und habe keine Ahnung.

Raspberry PI 3B+ mit HM-MOD-RPI-PCB,     
HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-SEC-SCo
Raspberry PI 3B+ mit 7" Touchdisplay

 

decade-submarginal