Neues Modul für Hyperion Server 98_Hyperion.pm

Begonnen von DeeSPe, 29 Juni 2016, 18:54:18

Vorheriges Thema - Nächstes Thema

DeeSPe

Ich habe während des Codens so drüber nachgedacht und verstehe ehrlich gesagt gar nicht wofür dieses Konfig Datei Lesen/Schreiben überhaupt gut sein soll!?
Es spart nur den Weg über einen anderen Editor!
Klar macht mir die Sache Spaß, aber macht mir auch eine Menge Arbeit (ist nicht mal eben schnell eingebaut wenn es ordentlich sein soll)...

Die Dinge die nur in der Konfig Datei veränderbar sind machen ja Sinn dass sie nur dort veränderbar sind.
Der Rest ist per diesem Modul während der Laufzeit einzustellen.

Und wenn ich wirklich diverse Konfigurationen brauche bei denen die Smoothing Werte verändert werden müssen oder die Bootsequenz anders sein soll dann lege ich die Dateien doch sowieso vorher an und nicht zur Laufzeit! Oder verstehe ich etwas falsch?

Ich bitte um wirklich sinnvolle Gründe warum das in das Modul sollte denn es macht (nach reichlich Überlegungen) keinen Sinn aus meiner Sicht!!!

Gruß
Dan

P.S. Lesen und Readings erstellen/verändern funktioniert schon in meiner Dev Version.  8)
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Kuzl

Hallo Dan,

ich sehe das genau so wie du.
Wenn man unterschiedliche Konfigurationen will, dann macht man sie doch einfach und schaltet sie um. Viel mehr wie 3 oder 4 werden das im Normalfall eh nicht sein. Und das meiste kann man eh on the fly ändern (wie z.b. die von MaMi angedachte Helligkeit in Abhängigkeit der Tageszeit).

Gruß,
Kuzl

Jack_n

Hallo Dan,

ich brauche auch keine Möglichkeit die Config's per FHEM zu erzeugen / editieren - wüsste keinen Grund der hier Dynamik verlangt.

Zuweisen einer Config an Hyperion natürlich schon.

VG
Joachim

DeeSPe

Danke Kuzl und Jack_n für Eure Meinungen und Unterstützung meiner Meinung.

Jetzt warte ich noch auf gegenteilige Meinungen, die mich versuchen zu überzeugen das doch einzubauen!

Na mal schauen ob da was kommt.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Andy89

Zitat von: DeeSPe am 27 Oktober 2016, 14:52:05
Danke Kuzl und Jack_n für Eure Meinungen und Unterstützung meiner Meinung.

Jetzt warte ich noch auf gegenteilige Meinungen, die mich versuchen zu überzeugen das doch einzubauen!
also ich bin auch der Meinung, dass es nicht nötig ist, sowas in fhem steuern zu können  ;)

Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

DeeSPe

Schön dass es noch ein Weiterer so sieht.
Und da keine Gegenstimmen kommen mache ich diese Entwicklung nicht weiter.

Ich bräuchte von Euch aber mal bitte ein anderes Feedback!
Mit der aktuellen Hyperion Version 1.03.2 hat sich scheinbar etwas beim (neu)starten von Hyperion verändert.

Ich benutze nur den V4L2 Grabber oder im Testsystem den internen Grabber.
Bei beiden ist es nun so dass beim Neustart von Hyperion kurz der Starteffekt von FHEM festgestellt (und angezeigt) wird und danach geht mein Hyperion eigentlich aus, FHEM stellt es aber als Ambilight (clearall) dar.
Aus meiner Sicht hat sich was bei der Prioritätsanzeige im JSON beim Neustart verändert. Vor Hyperion Version 1.03.2 war nach Neustart und Zustand AUS keine Priorität im JSON enthalten. Nun nimmt die Priorität aber die default Priorität vom eingestellten Grabber an.
In meiner Dev Version habe ich das bereits gefixt, bin mir aber unsicher mit dem Einchecken des Updates! Eventuell ist ja das Verhalten bei Euch anders...

Vielen Dank im Voraus.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Andy89

#291
Servus Dan,
das kann ich so nicht feststellen, aber was ich festgestellt habe, dass der Hyperion gar nicht gestartet wurde bei mir. Erst als ich dem $binpath ein ".sh" angehängt habe, startet Hyperion. Dann startet es aber so, wie es gewollt ist und ist direkt im clearall drin und nicht aus.

Ich hab LibreElec auf meinem RaspberryPi. Ich weiß nicht, ob ich deswegen .sh anhängen muss. Aber wenn ich direkt auf der Konsole den Befehl ohne .sh eintippe, kommt auch ein Fehler:
/storage/hyperion/bin/hyperiond /storage/hyperion/config/grabber
.config.json
/storage/hyperion/bin/hyperiond: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory


Mit dem  .sh Anhang startet es ohne Probleme.

Beste Grüße
Andy

edit: habe gerade in der Referenz gelesen, dass dieses Verhalten normal ist und ich einfach .sh beim hyperionBin Attribut anhängen soll^^
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

DeeSPe

Zitat von: Andy89 am 27 Oktober 2016, 22:22:21
Servus Dan,
das kann ich so nicht feststellen, aber was ich festgestellt habe, dass der Hyperion gar nicht gestartet wurde bei mir. Erst als ich dem $binpath ein ".sh" angehängt habe, startet Hyperion. Dann startet es aber so, wie es gewollt ist und ist direkt im clearall drin und nicht aus.

Ich hab LibreElec auf meinem RaspberryPi. Ich weiß nicht, ob ich deswegen .sh anhängen muss. Aber wenn ich direkt auf der Konsole den Befehl ohne .sh eintippe, kommt auch ein Fehler:
/storage/hyperion/bin/hyperiond /storage/hyperion/config/grabber
.config.json
/storage/hyperion/bin/hyperiond: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory


Mit dem  .sh Anhang startet es ohne Probleme.

Beste Grüße
Andy

Jepp, das ist auch das typische Verhalten von OpenElec. Hatten wir erst vor kurzem hier das Thema und ich musste noch einen Fix dafür einbauen damit es richtig funktioniert. Eben genau wegen so Kleinigkeiten wie diesem speziellen .sh am Ende habe ich den Pfad dafür per Attribut konfigurierbar gemacht.
Das erinnert mich daran dass ich noch mal schauen muss warum die Fehlermeldung von der Konsole nicht auch in FHEM als Fehlermeldung ankommt!

Welchen Grabber benutzt Du denn? Das müsste dann der Kodi Grabber sein oder?
Wenn Du Hyperion mit dieser Konfig neustartest, in welchen Modus geht es dann automatisch, Ambilight oder aus? Und hast Du einen Starteffekt eingestellt?
Könntest Du mir evtl. mal den kompletten JSON Output beim statusRequest nach einem Neustart von Hyperion hier posten? Das wäre echt cool!
Den bekommst Du wenn Du "verbose 5" beim Hyperion Device setzt und dann den Event Monitor aufmachst und das Häkchen bei "FHEM log" setzt. Setzte verbose aber wieder zurück nachdem der Logeintrag da ist denn es kommen damit sehr viele Daten im Log an.

Danke im Voraus.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Andy89

Zitat von: DeeSPe am 27 Oktober 2016, 22:37:09
Jepp, das ist auch das typische Verhalten von OpenElec. Hatten wir erst vor kurzem hier das Thema und ich musste noch einen Fix dafür einbauen damit es richtig funktioniert. Eben genau wegen so Kleinigkeiten wie diesem speziellen .sh am Ende habe ich den Pfad dafür per Attribut konfigurierbar gemacht.
Das erinnert mich daran dass ich noch mal schauen muss warum die Fehlermeldung von der Konsole nicht auch in FHEM als Fehlermeldung ankommt!
ich muss gestehen, ich habe nicht den kompletten Thread gelesen und verfolgt  :o :o

Zitat von: DeeSPe am 27 Oktober 2016, 22:37:09
Welchen Grabber benutzt Du denn? Das müsste dann der Kodi Grabber sein oder?
Als Grabber benutze ich meistens meinen HDMI Output, also den grabber-v4l2. Selten nutze ich Kodi direkt als Ambilight Quelle, da das ja auch über meinen HDMI Output geht  :D :D

Zitat von: DeeSPe am 27 Oktober 2016, 22:37:09
Wenn Du Hyperion mit dieser Konfig neustartest, in welchen Modus geht es dann automatisch, Ambilight oder aus?
Es geht automatisch ins Ambiligt quasi clearall und das funktioniert auch.

Zitat von: DeeSPe am 27 Oktober 2016, 22:37:09
Und hast Du einen Starteffekt eingestellt?
Nein bisher habe ich keinen Starteffekt drin. Habe nun aber extra eine weitere Config mit StartEffekt gestartet. Der gewünschte Starteffekt startet in der richtigen Länge und danach ist mein Ambilight(clearall) an. Alles so wie es sein soll =)

Zitat von: DeeSPe am 27 Oktober 2016, 22:37:09
Könntest Du mir evtl. mal den kompletten JSON Output beim statusRequest nach einem Neustart von Hyperion hier posten? Das wäre echt cool!
Den bekommst Du wenn Du "verbose 5" beim Hyperion Device setzt und dann den Event Monitor aufmachst und das Häkchen bei "FHEM log" setzt. Setzte verbose aber wieder zurück nachdem der Logeintrag da ist denn es kommen damit sehr viele Daten im Log an.
Meinst du diese Antwort ?
2016.10.27 22:42:25 5 : AmbilightTV: Hyperion_Call: json object: {"command":"serverinfo"}
2016.10.27 22:42:25 5 : SW: {"command":"serverinfo"}
2016.10.27 22:42:25 5 : AmbilightTV: url 192.168.xx.xx:19444 returned result: {"info":{"activeEffects":[],"activeLedColor":[],"adjustment":[{"blueAdjust":[0,0,255],"greenAdjust":[0,255,0],"id":"default","redAdjust":[255,0,0]}],"correction":[{"correctionValues":[255,255,255],"id":"default"}],"effects":[{"args":{"color-end":[238,173,47],"color-start":[136,97,7],"fade-time":5.0},"name":"Cinema brighten lights","script":"/storage/hyperion/effects/fade.py"},{"args":{"color-end":[136,97,7],"color-start":[238,173,47],"fade-time":5.0},"name":"Cinema dim lights","script":"/storage/hyperion/effects/fade.py"},{"args":{"color":[255,0,0],"fadeFactor":0.70,"speed":1.0},"name":"Knight rider","script":"/storage/hyperion/effects/knight-rider.py"},{"args":{"blobs":5,"color":[0,0,255],"hueChange":60.0,"reverse":false,"rotationTime":60.0},"name":"Blue mood blobs","script":"/storage/hyperion/effects/mood-blobs.py"},{"args":{"baseChange":true,"baseColorChangeRate":2.0,"baseColorRangeLeft":160,"baseColorRangeRight":320,"blobs":5,"color":[0,0,255],"hueChange":30.0,"reverse":false,"rotationTime":60.0},"name":"Cold mood blobs","script":"/storage/hyperion/effects/mood-blobs.py"},{"args":{"baseChange":true,"baseColorChangeRate":0.20,"baseColorRangeLeft":0,"baseColorRangeRight":360,"blobs":5,"colorRandom":true,"hueChange":30.0,"reverse":false,"rotationTime":60.0},"name":"Full color mood blobs","script":"/storage/hyperion/effects/mood-blobs.py"},{"args":{"blobs":5,"color":[0,255,0],"hueChange":60.0,"reverse":false,"rotationTime":60.0},"name":"Green mood blobs","script":"/storage/hyperion/effects/mood-blobs.py"},{"args":{"blobs":5,"color":[255,0,0],"hueChange":60.0,"reverse":false,"rotationTime":60.0},"name":"Red mood blobs","script":"/storage/hyperion/effects/mood-blobs.py"},{"args":{"baseChange":true,"baseColorChangeRate":2.0,"baseColorRangeLeft":333,"baseColorRangeRight":151,"blobs":5,"color":[255,0,0],"hueChange":30.0,"reverse":false,"rotationTime":60.0},"name":"Warm mood blobs","script":"/storage/hyperion/effects/mood-blobs.py"},{"args":{"color_one":[255,0,0],"color_two":[0,0,255],"colors_count":10,"reverse":false,"rotation-time":1.50},"name":"Police Lights Single","script":"/storage/hyperion/effects/police.py"},{"args":{"color_one":[255,0,0],"color_two":[0,0,255],"reverse":false,"rotation-time":1.0},"name":"Police Lights Solid","script":"/storage/hyperion/effects/police.py"},{"args":{"brightness":1.0,"reverse":false,"rotation-time":60.0},"name":"Rainbow mood","script":"/storage/hyperion/effects/rainbow-mood.py"},{"args":{"brightness":1.0,"reverse":false,"rotation-time":3.0},"name":"Rainbow swirl fast","script":"/storage/hyperion/effects/rainbow-swirl.py"},{"args":{"brightness":1.0,"reverse":false,"rotation-time":20.0},"name":"Rainbow swirl","script":"/storage/hyperion/effects/rainbow-swirl.py"},{"args":{"saturation":1.0,"speed":1.0},"name":"Random",
"script":"/storage/hyperion/effects/random.py"},{"args":{"colorLevel":230,"speed":1.50,"whiteLevel":100},"name":"Running dots","script":"/storage/hyperion/effects/running_dots.py"},{"args":{"alarm-color":[255,0,0],"post-color":[255,174,11],"shutdown-enabled":false,"speed":1.20},"name":"System Shutdown","script":"/storage/hyperion/effects/shutdown.py"},{"args":{"color":[255,0,0],"percentage":10,"rotation-time":12.0},"name":"Snake","script":"/storage/hyperion/effects/snake.py"},{"args":{"brightness":1.0,"color":[255,255,255],"random-color":true,"reverse":false,"rotation-time":3.0,"saturation":1.0,"sleep-time":0.050},"name":"Sparks Color","script":"/storage/hyperion/effects/sparks.py"},{"args":{"brightness":1.0,"color":[255,255,255],"random-color":false,"reverse":false,"rotation-time":3.0,"saturation":1.0,"sleep-time":0.050},"name":"Sparks","script":"/storage/hyperion/effects/sparks.py"},{"args":{"color":[0,0,255],"frequency":10.0},"name":"Strobe blue","script":"/storage/hyperion/effects/strobe.py"},{"args":{"color":[188,17,66],"frequency":10.0},"name":"Strobe Raspbmc","script":"/storage/hyperion/effects/strobe.py"},{"args":{"color":[255,255,255],"frequency":10.0},"name":"Strobe white","script":"/storage/hyperion/effects/strobe.py"},{"args":{"speed":1.0},"name":"Color traces","script":"/storage/hyperion/effects/traces.py"},{"args":{"ListenIP":"239.255.28.01","ListenPort":2801},"name":"UDP multicast listener","script":"/storage/hyperion/effects/udp.py"},{"args":{"ListenPort":2391},"name":"UDP listener","script":"/storage/hyperion/effects/udp.py"},{"args":{"sleepTime":0.750},"name":"X-Mas","script":"/storage/hyperion/effects/x-mas.py"}],"hostname":"AmbilightPi","hyperion_build":[{"time":"Jul 25 2016 06:54:36","version":"V1.03.2 (brindosch-99d9396/d3713a8-1469452981"}],"priorities":[{"duration_ms":939,"priority":900}],"temperature":[{"correctionValues":[255,255,255],"id":"default"}],"transform":[{"blacklevel":[0.0,0.0,0.0],"gamma":[1.0,1.0,1.0],"id":"default","luminanceGain":1.0,"luminanceMinimum":0.0,"saturationGain":1.0,"saturationLGain":1.0,"threshold":[0.0,0.0,0.0],"valueGain":1.0,"whitelevel":[1.0,1.0,1.0]}]},"success":true}


Beste Grüße
Andy
FHEM 6.0 auf rPi4 docker (mit Alexa & Siri); dbLog, FTUI, Sonos, XiaomiMapCreator auf rPi4 docker;
raspimatic auf rPi3+ > diverse Aktoren und Sensoren;
LGW > (PCA301),EC3000,LaCrosse; MQTT2 > WLAN-Steckdosen,Xiaomi Map;
Harmony Hub;Sonos;Onkyo AVR;RGB WLAN Controller;Netatmo;Withings;Unifi;AMAD

DeeSPe

Vielen Dank für Deine detailliertes und wertvolles Feedback!
Es hat mich, denke ich, auf die richtige Spur gebracht.
Ja, es war der Output den ich habe wollte!  8)

Ich glaube jetzt die Logik durchschaut zu haben und habe es jetzt wohl richtig gefixt.
Werde das mal noch ein paar Mal testen und dann werde ich das Update mit anderen kleinen Korrekturen einchecken.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Habe nun reichlich getestet und das Update eingecheckt.
Gibt's dann wie immer ab morgen früh im Update oder ab sofort in SVN.

Changelog:

  • Erkennung des off Status nach dem Starteffekt behoben
  • ein paar Readingswerte und -bereiche angepasst
  • Slider auf neue Werte angepasst
  • "event-on-update-reading serverResponse" beim define hinzugefügt
  • Anpassungen der commandref

Jetzt steht noch die richtige Log Ausgabe eventueller Fehlermeldungen der Konsole auf meiner ToDo Liste. Da muss ich mich nochmal in Ruhe ransetzen, kann eigentlich auch nicht viel sein. ???

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Bootscreen

Hy =)

freut mich das du Projekt weiter führst, ich bin leider Zeitlich zu nichts mehr gekommen :(

Aber eine Frage:
Kann ich bei deinem Modul irgendwie die Meldung abstellen das der Hyperion Server nicht erreichbar ist? Er spamt mir im Minuten Takt das Log voll:
Zitat2016.10.28 10:52:51 3: Opening hyperion device osmc:19444
2016.10.28 10:52:51 3: Can't connect to osmc:19444: gethostbyname osmc failed
Verbose 2 würde zwar gehn, aber da hab ich bedenken ob mir andere Log Eintrage auch verloren gehn.
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

DeeSPe

Zitat von: Bootscreen am 28 Oktober 2016, 10:58:54
Hy =)

freut mich das du Projekt weiter führst, ich bin leider Zeitlich zu nichts mehr gekommen :(

Aber eine Frage:
Kann ich bei deinem Modul irgendwie die Meldung abstellen das der Hyperion Server nicht erreichbar ist? Er spamt mir im Minuten Takt das Log voll:Verbose 2 würde zwar gehn, aber da hab ich bedenken ob mir andere Log Eintrage auch verloren gehn.

Ach schau mal einer an, der eigentliche Initiator dieses Projekts schaut mal vorbei.  8)
Ich hoffe Du hast nichts dagegen dass ich mich der Sache mal etwas näher angenommen habe und nun ein "richtiges" FHEM Modul daraus gemacht habe.  ???

Funktioniert denn Dein Hyperion Device so mit dem Namen osmc? Es sieht für mich so aus als wenn die Namensauflösung nicht klappt und FHEM somit keine Verbindung herstellen kann!?
Die Log Meldung lässt sich wie Du schon bemerkt hast nur mit "verbose 2" unterdrücken. Und das ist Absicht so! Denn genau das soll ja auch in's Log, da es sich hier um eine wichtige Fehlermeldung handelt.

Gruß
Dan

P.S. Habe bemerkt dass es immer noch Probleme mit der an/aus/rgb Erkennung gibt. Werde das heute versuchen nochmal komplett aufzudröseln um dem endlich mal ein Ende zu setzen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Bootscreen

Alles gut ^^ Freut mich das es nich in der Versenkung verschwunden ist =)

Ja das funktioniert, solange halt der PI mit Hyperion auch an ist. FHEM läuft auf einem PI 24/7 Hyperion läuft auf einem PI im Wohnzimmer nur dann wenn wir Film schauen und ist halt das Problem. Schaut niemand Film ist der Hyperion PI aus und FHEM meckert.
Wird sonst nichts weiter auf der 3 geloggt? Weil dann kann ich es runtersetzen. Andernfalls würde ich das ungern machen da mir dann zuviele Meldungen verloren gehn. Wäre es nich möglich nen attr ala supressOfflineLog oder so einzubauen wo die Meldung das der Host nicht erreichbar ist unterdrückt werden?
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

DeeSPe

Zitat von: Bootscreen am 28 Oktober 2016, 12:05:49
Alles gut ^^ Freut mich das es nich in der Versenkung verschwunden ist =)

Ja das funktioniert, solange halt der PI mit Hyperion auch an ist. FHEM läuft auf einem PI 24/7 Hyperion läuft auf einem PI im Wohnzimmer nur dann wenn wir Film schauen und ist halt das Problem. Schaut niemand Film ist der Hyperion PI aus und FHEM meckert.
Wird sonst nichts weiter auf der 3 geloggt? Weil dann kann ich es runtersetzen. Andernfalls würde ich das ungern machen da mir dann zuviele Meldungen verloren gehn. Wäre es nich möglich nen attr ala supressOfflineLog oder so einzubauen wo die Meldung das der Host nicht erreichbar ist unterdrückt werden?

Hast Du evtl. die Möglichkeit durch Auswertung anderer Events festzustellen ob Dein Hyperion Pi an oder aus ist? Bzw. wie fährst Du Deinen Hyperion Pi hoch/runter?
Dann könntest Du nämlich "disable 1" im Hyperion Device setzen und die Logmeldungen sollten ausbleiben. Sobald Du dann den Hyperion Pi wieder startest, könntest Du "disable 0" setzen oder mit deleteattr das Attribut komplett löschen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe