Hey! :)
Ich wollte mal ein kleines Experiment teilen, das ich kürzlich umgesetzt habe – vielleicht gibt es ja abseits von vermutlich üblichen ,,braucht doch keiner"-Reflexen trotzdem etwas Interesse oder eine Diskussion.
Kurzfassung:
Ich habe einen MCP-Server als Brücke zu FHEM gebaut, der es einem lokal laufenden LLM erlaubt, FHEM-Devices strukturiert abzufragen und zu steuern. Das Ganze läuft ohne Cloud, komplett lokal, und greift letztlich nur über die bekannten FHEM-Mechanismen (in meinem Fall via verschlüsseltem Telnet) zu.
Etwas ausführlicher:
- MCP-Server stellt u. a. Funktionen wie list_devices, get_device_commands, execute_command bereit (mehr ERSTMAL für den ersten Durchstich nicht)
- LLM läuft lokal (LM Studio, GPU-beschleunigt, in diesem Fall einfach gpt-oss 20B auf meinem M2 Max MacBook Pro)
- Das Modell bekommt keine Sonderrechte, sondern nutzt exakt die definierten Schnittstellen via Telnet
- FHEM selbst bleibt unverändert, es kommt nur eine zusätzliche, klar abgegrenzte Steuerschicht dazu
Der praktische Test war dann banal:
Ein natürlicher Sprachbefehl (,,na dann schalte doch mal meine Schreibtischlampe ein") => Tool-Intents liefen los => Modell ermittelt passendes Device => prüft verfügbare Commands => führt den Befehl aus => Lampe geht an, sauber nachvollziehbar im FHEM-Log.
Mir ist völlig klar, dass jetzt direkt Fragen kommen wie
,,Warum nicht einfach Alexa/Google/HomeKit?" oder
,,Was bringt mir das gegenüber einem normalen Sprachassistenten?"
Fairer Punkt – für viele vermutlich gar keinen Mehrwert. Habe ich natürlich auch alles mit AlexaFhem und Homebridge laufen.
Für mich ist der interessante Teil aber:
- freie, lokale Interpretation natürlicher Sprache
- kein festes Skill-/Intent-Modell
- keine Cloud, kein Vendor-Lock-in
- nachvollziehbares Reasoning (welches Device warum angesprochen wurde)
Ob das am Ende Spielerei bleibt oder ob sich daraus sinnvolle Anwendungsfälle ergeben (z. B. komplexere Zustandslogik, Kontext, Kombination mehrerer Geräte), wird sich zeigen.
... aber ziemlich sicher kann ich jetzt sagen ,,Ich hab grade beim Kacken kalte Füße" und das Reasoning würde das Device ,,FussbodenheizungBad" finden und anschalten. :D :D :D
Ich wollte es hier einfach mal teilen – vielleicht hat ja jemand Lust, das technisch einzuordnen oder weiterzudenken, statt nur zu erklären, warum man das nicht braucht. :)
Vielleicht erweitere ich es auch mal und packe es in ein GitHub Repo oder so. :)
Viele Grüße
Patrick
Ich finde das interessant. Da war ja neulich ein c't Artikel zu MCP, da kam mir auch FHEM in den Sinn. Aber über ein paar Experimente im Prompt bin ich nicht hinausgekommen.
Das LLM hat sicher auch kein Problem den Quellcode und die Doku zu verarbeiten (ich sage mal nicht verstehen). Ich glaube, dass man da auch komplexere Aufgaben delegieren kann wie "Lege eine Regel an die das Flurlicht einschaltet wenn die Haustür geöffnet wird". Möglicherweise ist FHEM da auch ganz gut geeignet wegen der umfassenden Doku, dem frei zugänglichen Code und der programmiersprachen-ähnlichen Syntax. Also Code gerne teilen, einen Blick werde ich mal reinwerfen :)
Dann versuche ich doch mal vor dem Hintergrund meiner Erfahrung in mehreren wissenschaftlichen KI-Projekten, das "einzuordnen".
1. Die Steuerung einer Hausautomatisierung ist eine einfache Aufgabe mit sehr begrenztem Wortschatz und sehr begerenzter Semantik. Es ist eine irrsinnige Energie-(und sonstige Ressourcen-)Verschwendung, für dafür ständig eine Maschine vom Kaliber MacBook Pro laufen zu lassen. Tatsächlich hat sich das ein wenig eingeschlichen, manche KI-Projekte setzen wirklich für jeden Mist ein neuronales Netz ein.
2. Das Wesentliche bei der Hausautomatisierung ist die Erkennung eines "Intents", also einer Absicht. Diese lässt sich in den meisten Fällen aus einer einigermaßen normierten Sprache herausholen, genau dafür gibt es seit etlichen Jahren das FHEM-Modul Babble. Auch wenn ich die im Ausgangspost verwendete Sprache nicht verwenden will: Ein Satz, in dem die Begriffe "Toilette", "kalt" und "Füße" vorkommen, kann damit problemlos in eine FHEM-Anweisung umgesetzt werden. Da Babble auch die Ankopplung eines einfachen Chatbots erlaubt, können damit auch Dialoge geführt werden. Beispiel: Ich:"Spiele Musik" -> FHEM:"Wo soll ich Musik spielen" -> Ich:"Im Wohnzimmer" -> FHEM:"Von wem soll ich im Wohnzimmer Musik spielen" -> Ich:"Von Alison Balsom" -> FHEM:"OK, ich werde im Wohnzimmer Musik von Alison Balsom spielen"
3. Der Einsatz eines LLM ist nur sinnvoll, wenn eine solche Erkennung fehlschlägt. Dafür braucht man aber keinen MCP-Server, sondern kann das LLM dafür benutzen, die verwendete Sprache zu normieren. Beispiel, hier aus ChatGPT:
Ich gebe Dir nachfolgend mehrere Sätze zum analysieren. Extrahiere mir daraus jeweils erstens: Einen Handlungsort, zweitens: Ein zu bedienendes Gerät aus der Liste: Beleuchtung, Heizung,Klimaanlage, drittens: Eine am Gerät durchzuführende Aktion. Wenn sich aus einem Satz mehrere Aktionen ergeben würden, führe diese Tripel jeweils separat auf.
Satz 1: "Beim Sitzen auf der Toilette habe ich kalte Füße".
Satz 2: "Im Flur ist es zu dunkel"
Satz 3: "Im Schlafzimmer ist es zu warm und zu feucht"
Satz 1: ,,Beim Sitzen auf der Toilette habe ich kalte Füße."
Handlungsort: Toilette
Gerät: Heizung
Aktion: Heizung einschalten bzw. Heizleistung erhöhen
Satz 2: ,,Im Flur ist es zu dunkel."
Handlungsort: Flur
Gerät: Beleuchtung
Aktion: Beleuchtung einschalten bzw. Helligkeit erhöhen
Satz 3: ,,Im Schlafzimmer ist es zu warm und zu feucht."
Handlungsort: Schlafzimmer
Gerät: Klimaanlage
Aktion: Raum kühlen (Temperatur senken)
Handlungsort: Schlafzimmer
Gerät: Klimaanlage
Aktion: Luft entfeuchten
Solche Anfragen kommen vielleicht 1x pro Tag vor, alles Andere kann von einem semantischen System abgefangen werden.
4. Damit ist eigentlich klar, dass ein eigenes LLM für den begrenzten Zweck der Hausautomatisierung nicht sehr sinnvoll ist.
LG
pah
Aber nehmen wir jetzt mal eher die Konfiguration von FHEM selbst in den Blick, also das Anlegen von Devices, die ein bestimmtes gewünschtes Szenario abbilden, das man mit natürlicher Sprache beschreibt. Wäre das nicht eine sinnvolle Nutzung?
LLMs können da vermutlich nicht nur die korrekten Devices anlegen sondern auch noch den PERL Code erzeugen, den man ggf. in 99_myUtils.pm braucht. Dafür müsste das LLM auch nicht permanent laufen, sondern nur wenn man gerade was ändern will.
Geht die Diskussion hier:
https://forum.fhem.de/index.php?topic=143598.0
nicht in eine ähnliche Richtung?
Dort dann allerdings nicht mit lokalen Ressourcen sondern Gemini.
@RalfRog: Natürlich. Dort habe ich ja auch für das Modell aus mehreren Schichten geworben. Und das ist, pardon, nicht Werbung weil das Babble-Modul von mir stammt. Es steht jedem frei, etwas Anderes zu verwenden, ich denke, dass man auch mit Rhasspy so etwas aufsetzen kann.
@kgie: LLM sind sehr gut brauchbar als Sparringspartner beim Programmieren. Aber, sorry, nicht für Anfänger. Und man darf dabei auch nicht Code erwarten, der hohe Qualität hat.
LG
pah
mein Senf dazu:
ZitatAber nehmen wir jetzt mal eher die Konfiguration von FHEM selbst in den Blick, also das Anlegen von Devices, die ein bestimmtes gewünschtes Szenario abbilden, das man mit natürlicher Sprache beschreibt. Wäre das nicht eine sinnvolle Nutzung?
Klingt immer gut, wenn es etwas vereinfacht. ABER: wir kennen das doch zur Genüge:
Was man nicht selber entwickelt hat, fällt einem irgendwann auf die Füße.
- Fehleranalyse
- Verständnis des erst einmal unverständlichen (und in dem Augenblick unerwünschten)Verhaltens einer komplexen Steuerung
- Erweiterungen von vorhandenen Steuerungen
....
Hey zusammen,
erstmal danke für das viele und teils sehr unterschiedliche Feedback - finde ich sehr spannend und freue mich, dass überhaupt etwas zurückkam! :)
Ein paar Punkte zur Einordnung, weil hier teilweise aneinander vorbeigeredet wird und zum generellen Kontext:
Der Ansatz war und ist von Anfang an als Experiment (bzw. sogar Spielerei) genannt, nicht als Vorschlag für eine produktive, dauerhafte Sprachsteuerung von FHEM. Mich interessiert daher weniger ,,wie schalte ich am effizientesten ein Licht", sondern ,,wie verhält sich ein LLM, wenn es strukturiert und kontrolliert auf ein bestehendes System zugreifen darf" bis eben hin zu "Wohin können wir das entwickeln, um z.B. für die geschickte Konfiguration ein stabiles, schnelles und genaues Tool zu bekommen".
Dass HomeAssistant in diese Richtung bereits deutlich weiter ist (MCP ist dort inzwischen etabliert) war dann noch zusätzliches Salz in der Wunde - der Softwarearchitekt und HA-Nutzer aus meinem (beruflichen) Projekt war z.B. sogar erstaunt, dass "wir" (FHEM) so etwas noch nicht haben! (Jaa, der Spott in der Kantine war groß... :-X :D )
Ich bin mir aber auch nicht 100% sicher, was in HomeAssistant schon möglich ist. In meinem Falle habe ich ja zunächst
sehr bewusst auf MCP-Tools, welche Geräte anlegen etc. verzichtet. Das wäre sicher aber einer der nächsten Schritte. :) Dachte da im nächsten Schritt des Experiments grob an ein Sandbox-FHEM in einer VM mit einigen Device-Dummys zu denen man dann mal Automatismen schreiben lässt oder so.
@kgie
Ja, genau das ist für mich einer der spannendsten nächsten Schritte! :)
Nicht Live-Steuerung, sondern Konfigurationserzeugung (Devices, DOIFs etc.).
Wichtig dabei: sicher grade am Anfang bzw. für Profi-Nutzer (unter welche ich die meisten Leute, die alleine im Forum schon nur nicht in ihre eigenen Threads schauen mal packen würde :D) nicht
,,Prompt => ungeprüfter Code => live", sondern eher
Prompt => Vorschlag => Review => Anpassung/Refactoring => AktivierungGerade bei FHEM mit seiner offenen Doku, dem zugänglichen Code und der klaren Syntax sehe ich da Potenzial!
Zusätzlich würde ich mit RAG (Retrieval Augmented Generation) arbeiten, also Einbeziehen von Doku, Beispielen und ggf. Forenlösungen.
Dazu vielleicht noch ein Mini-Exkurs:
Viele schlechte Erfahrungen, welche Leute mit ,,Coding per KI" haben, kommen m.E. daher, dass ohne Spezifikation und Kontext gepromptet wird – dann sind inkonsistente Ergebnisse wenig überraschend und es wird abgeschmiert als "KI coded nicht in guter Qualität". Dass das an der Realität mittlerweile vorbei ist, sieht man aber natürlich an den Schlagzeilen wie z.B., dass Microsoft jetzt großflächig Claude Code für seine Entwickler ausrollt etc., wie man es also dreht, wendet oder ob man es selbst mag: Profis nutzen es, das ist klar! Man muss das "Werkzeug" aber natürlich gut verstehen und geschickt nutzen, da es ja nun doch etwas komplexer ist als z.B. ein Linter, der mich nur im JavaScript auf eine fehlende Klammer hinweist.
Anderes, realitätsnäheres Mini-Beispiel: Wenn ich 10-mal hintereinander selbst in ein gutes Tool wie Claude Code schlicht ,,Bau mir einen Taschenrechner" prompte, bekomme ich zwangsläufig 10 unterschiedliche Ergebnisse mit stark schwankender Qualität. Das ist kein Bug, sondern falsche Nutzung: fehlende Spezifikationen!
Hier hilft z.B. Spec-driven Development - also mit klaren Anforderungen reingehen:
- UI soll so aussehen
- Features müssen z.B. Wurzel und e-Funktion beinhalten
- Randbedingungen sind diese und jene
- Zielumgebung ist z.B. eine native Mac App in Swift
- etc.
und idealerweise ist das ganze RAG-unterstützt. So wird relevante Doku, bestehende Beispiele etc. vorab einbezogen und die Ergebnisse werden DEUTLICH konsistenter und nachvollziehbarer.
Genau diese Kombination halte ich für spannend, auch im FHEM-Kontext! :)
@pah
Ich glaube, hier sind wir fachlich näher beieinander, als es auf den ersten Blick bei der Antwort wirkt. Deine Punkte sind schlüssig - für eine produktive Sprachsteuerung, darum geht es hier aber nicht. :)
Ich denke, hier wurde "Experiment" und "Spielerei" völlig übergangen, aber das ist schon ok. Mit 1-2 Antworten in diese Richtung habe ich ja, wie anfangs erwähnt, auch gerechnet, daher ganz kurz zu den Punkten:
- Energieeffizienz ist bei einem Experiment und bei Entwicklung kein Bewertungskriterium. Das lokale System lief ohnehin, FHEM war nur ein angebundener Aktor etc.
- Intent-Erkennung per Babble / Regex etc. ist natürlich für strukturierte Sprache völlig ausreichend – das wird hier auch nicht ersetzt. Aber auch hier mal über "andere Nutzer" im Haus nachdenken, die vielleicht nicht wissen, wie ein Device genau heißt etc. - absoluter game changer, natürlich Sprache nutzen zu können, die nicht strukturiert ist und quasi keine Kenntnis über das System voraussetzt.
- Das gezeigte Normierungs-Beispiel ist korrekt, aber der experimentelle Unterschied ist: Das Modell entscheidet selbstständig über Devices, Fähigkeiten und Befehle. Um diese Entscheidungen kontrolliert ausführen zu können, braucht es dann genau so eine Schnittstelle wie MCP.
- Ein eigenes LLM nur für Hausautomatisierung ergibt keinen Sinn – das war auch nie die These. Davon ab geht das mMn generell in Richtung "KI Nutzen vs. Ressourcenverbrauch" und da könnten wir jetzt 700 Beispiele ausdiskutieren a la "Wenn du ChatGPT fragst, statt zu googeln verbrauchst du 10x mehr Energie für dasselbe Ergebnis", trotzdem tun Leute genau das nunmal, weil es natürlicher zu bedienen ist! Aber darum geht es hier wie gesagt nicht und das Thema möchte ich bitte entsprechend beenden.
@KölnSolar
Völlig berechtigter Hinweis! Das Thema hatte ich noch gar nicht erwähnt!
Bendenke aber hier auch mal den Unterschied bezüglich der Zugänglichkeit zwischen z.B.:
- komplexen, gewachsenen Profi-Setups mit hunderten Regeln
- Einsteiger- oder Hobby-Szenarien, wo jemand schlicht möchte, dass abends bei Bewegung drei Lampen angehen – und dafür erstmal eine Stunde braucht, nicht mit der Doku klar kommt, im Forum aber gesagt bekommt "Na lies doch die Doku" :D (scnr)
Grade letzterem Fall kann ,,KI als Vorschlagsgenerator" mMn helfen, solange klar ist, dass man Verantwortung und Verständnis nicht vollständig delegiert.
@RalfRog
Genau - wenn es einen MCP-Server für FHEM gibt, ist der Client im Prinzip austauschbar!
Lokales LLM, Cloud-LLM, Coding-Agent – alles denkbar, je nach Zielsetzung und Kostenmodell.
Hier fand ich eben lokale Modelle aus mehreren Gründen spannend, da man keine teuren Token bezahlt und ich sonst bei 8/10 Usern bereits das große "Jaja klar, dann weiß OpenAI demnächst auch noch, wo meine Lampe steht - NEIN, DANKE!" am Horizont gesehen habe. :D ... primär aber der experimentelle und spaßige Aspekt, sowas komplett selbst zu betreiben :P
Letztlich sind dann ja auch Lösungen denkbar wie ein LLM, was auf dem Haussteuerungsserver läuft und per Routing z.B. nur in komplexen Fällen bedient wird oder z.B. in einer VM für unterschiedliche Anwendungen im Haus zur Verfügung steht... die Möglichkeiten sind da unzählig - aber alle auch noch etwas weiter am Horizont.
Ich werde den Code aufräumen und dann gern teilen - Feedback aus unterschiedlichen Richtungen find ich aber weiterhin super spannend, gerade auch kritisch-konstruktives!
Hach, mir macht das Thema einfach Spaß. :D
Viele Grüße :)
Patrick
Zitat von: Pati_Alpha am 28 Januar 2026, 17:23:23Kurzfassung:
Ich habe einen MCP-Server als Brücke zu FHEM gebaut, der es einem lokal laufenden LLM erlaubt, FHEM-Devices strukturiert abzufragen und zu steuern.
Ich habe den von dir entwickelten MCP Server nicht gefunden.
Ich habe auch einen erstellt.
Allerdings hat meiner einen anderen Fokus:
- Lesen von FHEM-Config-Dateien (*.cfg)
- Best-Effort Parsing von:
define
attr
include - Quellpositions-Tracking (Datei + Zeilennummer)
- Read-only Tool-Funktionen (kein Write/Apply)
https://github.com/sidey79/fhem-mcp
Die nächste Funktion die ich einbaue ist der lesende Zugriff auf ein laufendes FHEM System.
Grüße Sidey
Hi,
- Ein Erfahrungsbericht, weil ich gerade über den Post gestolpert bin -ich nutze nun seit mehreren Monaten sehr intensiv Claude für die Verwaltung meines Heimservers (etwa 40 Container). Der Fokus liegt klar auf dem Editieren der Config über die verschiedenen Container hinweg. FHEM ist nur einer davon und er interagiert mit vielen anderen. Alle werden durch Claude (mit)verwaltet.
Ich nutze keinen MCP, sondern arbeite mit Root-Zugriff auf FHEM in der Konsole. "Ohoh" mögen da viele denken, aber mit dem richtigen Regime an Regeln kein Problem. Das zu diskutieren, wäre hier auch nicht der richtige Ort.
Claude hat mir vieles abgenommen und Fehler behoben, die ich seit Jahren nicht beheben konnte. Warum? Claude ist 1.000 mal schneller als ich und hat 100.000.000 mal mehr Wissen.
Was Claude mir konkret abgenommen hat (wenige Beispiele)- Wenn ich unklare Fehler aus einem Modul geworfen bekomme, korreliert Claude die Fehler automatisch mit den Ausführungen und Events zu diesem Zeitpunkt (die ich großteils ohnehin in einer DB speichere), schaut in den Code der Module und sagt mir genau, was los ist. Ein falscher Datentyp in ModBus; ein falsches Zeichen. Ich hätte das nie gefunden.
- Auch Dinge, die ich nicht angegangen bin, weil Kosten/Nutzen nicht gepasst haben, sind nun gelöst. BlockingGet auf NonBlocking überall umstellen -> macht Claude im Schlaf, für mich wäre es ein Wochenende gewesen. Dämliches Callback Geraffel ^^
- Die Modbus-Integration eines Wechselrichters funktioniert nach FW Update nicht mehr, obwohl ModBus verbunden ist? Claude schreibt einfach selbst den Modbus-Befehl in seiner CLI und erkennt, dass FHEM dann die Antwort auf den Claude-Request bekommen hat. Das LLM findet eine Lösung für das Problem, dass der Wechselrichter nur mit einem Master verbunden sein kann. Hätte ich die kryptischen Modbus-Befehle analysiert? Schon lange nicht mehr.
- "Warum lädt das Elektroauto gerade nicht auf?" -> Claude sagt mir ob Fehler, oder verbrauchsbedingt. In dem Fall war es das ModBus Thema...
- Meine Rollladensteuerung exakter auf den Sonnenverlauf anpassen? Claude schreibt mir das Modell: Azimuth, Sinus, Cosinus und noch schnell Topographiedaten für die Verschattung durch Nachbargebäude und Bäume runterladen und einbauen? Easy. Die Rollläden fahren nun perfekt, an jedem Tag des Jahres. Overengineering at it's best. Siehe Bild im Anhang.
- Mal kurz sagen: "Schreib mir ein DOIF, das eine Telegram-Nachricht an (mich) schickt, wenn in Frigate am Ort (Zone) nachts eine Person erkannt wird, und setze es produktiv" - kein Problem. Umgesetzt, wie ich es gemacht hätte: die gleichen Trigger, die gleiche DOIF-Syntax, der Name fängt wie die anderen DOIF mit doif_frigate an, es werden DOIF-Attribute verwendet usw.
- Meine FHEM-Oberfläche war schon hübsch - nun ist sie hübscher. Claude hat mir das Style geschrieben.
Der Haken: die KI braucht ein klares RegelwerkDie Themen oben waren nur deswegen Selbstläufer
geworden, weil ich FHEM und Claude nun schon lange benutze und die richtigen Anweisungen gesetzt habe. So wird das Modell immer besser und die Arbeit immer weniger.
Man muss das nicht tun, aber insbesondere diejenigen, die seit Jahren dabei sind und eigene Strategien und Herangehensweisen haben, werden sonst schwere Probleme bekommen. Die neue Config ist ohne Regeln nur noch ein Fremdkörper, den man selbst nicht versteht.
Nachrichten wie oben ("Schreibe doif") integrieren nur dann schönen Code in FHEM, wenn man ein Skill definiert hat, das den "FHEM-Stil" und den eigenen Stil durchsetzt. In dem Skill stehen dann (nur sinngemäß) Dinge wie:
- Schreibe DOIF in der DOIF-Sprache; nutze Perl nur, wenn DOIF keine Lösung bietet -> sonst schreibt Claude nur PERL-DOIF (das ist für das LLM naheliegender).
- Ein DOIF-Kommando ist entweder ein Plain-Befehl oder ein kompletter Perl-Block - nie ein {}-Fragment im Klartext, das landet sonst wörtlich als Text in der Telegram-Nachricht.
- Entprellung/Verzögerung über native Attribute (wait, cmdpause), nicht über selbstgebaute Perl-Timer.
- Nutze wo möglich docker exec fhem perl /opt/fhem/fhem.pl 7072 anstelle des Edits der fhem.cfg. Letzteres benötigt vorher ein save und nach dem Edit einen Container-Restart.
- Kein rereadcfg, solange CUL_HM aktiv ist - das ist kein selektives Reload, sondern ein kompletter Teardown; CUL_HM wirft dann zwingend "Restart FHEM instead".
- Nach jedem modify/defmod ein Read-Back per jsonlist2 <dev> DEF - FHEM akzeptiert syntaktisch gültigen, aber inhaltlich falschen Code kommentarlos (z. B. nach Shell-Truncation).
- Einige Syntax-Hinweise bzgl. Quoting: beim Deploy über SSH $ und @ escapen; bei mehreren $-Stellen die lokale Hülle in Single-Quotes - sonst expandiert die Shell Platzhalter wie $1/$EVENT still zu leer.
- Teste neue Nachrichten-DOIFs erst gegen ein Scratch-Reading, nicht live gegen den echten Bot - sonst Handy-Spam bei jedem Fehlversuch.
- Verlasse dich nie auf "Config sieht korrekt aus": Funktionsnachweis braucht Live-State + Log + DB-Historie - FHEM scheitert meist lautlos.
Selbstpflegendes SkillMein FHEM-Skill dafür hat
800 Zeilen und wird durch Claude selbst gepflegt. Eine Anweisung dafür ist bspw. automatisiert nach jeder Session:
ZitatDu hast in dieser Session viel Kontext über FHEM gesammelt. Du hast vielleicht Fehler gemacht und korrigiert. Manchmal habe ich dich korrigiert. Dinge haben nicht auf Anhieb funktioniert und könnten effizienter und sicherer sein. Analysiere die Konversation auf diese Punkte und aktualisiere das FHEM-Skill.
Daneben braucht es: einen klaren Deploy-Workflow, Sicherheitsrichtlinien (Harness), Backupstrategien, kontinuierliche Verbesserung, Feedbackschleifen, "Erst Lösung präsentieren, dann umsetzen" etc. Ich habe hier nur einen Teil geschrieben.
Fazit"Probleme" hatte ich bisher nie mit der KI. Man muss sie nur für den eigenen Betrieb anlernen, wie einen neuen Mitarbeiter.
Für mich ist die KI unterm Strich eine enorme Hilfe, die mir mehr ermöglicht als je zuvor. Das wird aber nicht auf jeden zutreffen, weil KI kein Selbstläufer ist und der Nutzen erstmal skalieren muss.
Und noch ein kleiner Tipp für den Start: werft beim nächsten Fehler doch mal der KI eure FHEM.cfg und die Logs hin. Fehleranalysieren klappt damit meist schon sehr gut. Ganz ohne den Apparat außenrum.
Just my 50 cents :)
Zu diesem langen Erguss nur eines: Ein LLM verfügt über GAR KEIN Wissen.
pah
Zitat von: Prof. Dr. Peter Henning am 07 Juli 2026, 22:49:09Zu diesem langen Erguss nur eines: Ein LLM verfügt über GAR KEIN Wissen.
pah
Vieleicht interessiert deine Meinung zur Wortdefinition von "Wissen im Kontext von KI" ja irgendjemanden im Philosopie Forum?
Das ist nunmehr nicht mal 5 Cent Wert.
pah
Ach, pah...
Im Prinzip hat er doch mit der Aussage
Zitat von: tobbse am 07 Juli 2026, 18:08:44Claude ist ... als ich und hat 100.000.000 mal mehr Wissen.
zumindest mathematisch recht, wenn man den Multiplikand mit 0 annimmt.
Hach, noch ein wertvoller Kommentar, der dem speziellen Ruf der FHEM-Gemeinde gerecht wird :)
Ironisch, dass die Generation, die FHEM maßgeblich mit aufgebaut hat, durch deren Gebaren dessen Niedergang längst besiegelt hat. Die Neuanmeldungen sind im Keller und die Leute wandern ab (dank KI leichter denn je 😊). Aus der Community ist eine ziemlich kleine Clique geworden, die überwiegend noch aus Veteranen besteht.
Das Abrutschen in die Bedeutungslosigkeit ist aber auch nicht verwunderlich, wenn einzelne Mitglieder die Community mit derart nutzlosen Off-Topic Kommentaren schädigen und die Arbeit der anderen damit zunichte machen. Beitragen möchte hier seit langem niemand mehr.
Insbesondere beim Thema KI merkt man, wie groß die Verlustangst bei manchen ist, weil das mühsam angehäufte "Expertenwissen" plötzlich per Prompt zugänglich wird und vielmehr überholt wird. Da nützt es auch nichts, sich auf vermeintliche Autorität zu berufen ("Erfahrung in mehreren wissenschaftlichen KI-Projekten"), um dann Werbung für die eigene Arbeit zu machen – am Ende hat man den Faden wohl längst verloren. Von der Erfahrung hinsichtlich LLM ist jedenfalls nichts zu sehen. Warum auch? Die Wirtschaft hat die Wissenschaft beim Thema KI - speziell LLM - schlichtweg überrrannt.
Aber es gibt auch Licht am Ende des Tunnels. Dann sind die FHEM-Urgesteine komplett unter sich. FHEM wird von und mit den FHEM-Boomern beerdigt. Die anderen sind dann längst bei Home Assistant.
Schade ist es für den Teil der Mitglieder, die sich mit wirklich viel Herzblut engagieren. Insbesondere für diejenigen, die Freude daran haben anderen zu helfen.
Anhang:
- Anzahl Neuanmeldungen je Jahr, aufgeschlüsselt danach, wie viele Kommentare die User insgesamt seit ihrer Registrierung schon geschrieben haben
- Anzahl der Beiträge von Nutzern gruppiert nach Mitgliedsjahren (letzte 30 Tage)
Bin dann mal bei HAS, tobt euch aus.
Liebe Grüße
Es ist mir eine große Freude, einem solchen Nichtswisser - laut eigener Bekundung hat er ja nur 1/100.000.000 des Wissens eines statistischen Sprachmodells - hier bei FHEM künftig nicht mehr über den Weg zu laufen.
ZitatDie Wirtschaft hat die Wissenschaft beim Thema KI - speziell LLM - schlichtweg überrrannt.
Das ist ein solch hanebüchener Unsinn, dass ich das gerne als Negativbeispiel in mein nächstes Buch aufnehme. Danke für den wertvollen Beitrag!
pah
Fängt das Buch mit "Es war einmal..." an?
Ich möchte hiermit alle Teilnehmer bitten den Streit privat weiterzufuehren.
Mag mir gar nich ausmalen, wie lange ich ohne Agenten an den Koordinaten dieser Layout-Datei gesessen hätte.
rgb 'FFFFFF'
rect 0 0 640 384 1
rgb '000000'
font /usr/share/fonts/truetype/msttcorefonts/Arial.ttf
pt 13
thalign 'center'
tvalign 'center'
rgb 000000
line 0 0 0 0 1
# --- Kopfzeile: raum-Spalte (ohne Titel) + Wochentage/Feiertage/Abfalltermine (dynamisch zentriert) ---
rect 0 0 15 32 0
rect 15 0 104 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.0','') eq '' && bla_wasteForDay(0) eq '' }
text 59 16 'Mo'
condition { ReadingsVal('Belegungsplan','holidays.0','') ne '' && bla_wasteForDay(0) eq '' }
text 59 11 'Mo'
pt 9
text 59 21 { substr(ReadingsVal('Belegungsplan','holidays.0',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.0','') eq '' && bla_wasteForDay(0) ne '' }
text 59 11 'Mo'
pt 9
text 59 21 { substr(bla_wasteForDay(0),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.0','') ne '' && bla_wasteForDay(0) ne '' }
text 59 5 'Mo'
pt 9
text 59 16 { substr(ReadingsVal('Belegungsplan','holidays.0',''),0,12) }
text 59 27 { substr(bla_wasteForDay(0),0,12) }
condition 1
pt 13
rect 104 0 192 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.1','') eq '' && bla_wasteForDay(1) eq '' }
text 148 16 'Di'
condition { ReadingsVal('Belegungsplan','holidays.1','') ne '' && bla_wasteForDay(1) eq '' }
text 148 11 'Di'
pt 9
text 148 21 { substr(ReadingsVal('Belegungsplan','holidays.1',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.1','') eq '' && bla_wasteForDay(1) ne '' }
text 148 11 'Di'
pt 9
text 148 21 { substr(bla_wasteForDay(1),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.1','') ne '' && bla_wasteForDay(1) ne '' }
text 148 5 'Di'
pt 9
text 148 16 { substr(ReadingsVal('Belegungsplan','holidays.1',''),0,12) }
text 148 27 { substr(bla_wasteForDay(1),0,12) }
condition 1
pt 13
rect 192 0 281 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.2','') eq '' && bla_wasteForDay(2) eq '' }
text 236 16 'Mi'
condition { ReadingsVal('Belegungsplan','holidays.2','') ne '' && bla_wasteForDay(2) eq '' }
text 236 11 'Mi'
pt 9
text 236 21 { substr(ReadingsVal('Belegungsplan','holidays.2',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.2','') eq '' && bla_wasteForDay(2) ne '' }
text 236 11 'Mi'
pt 9
text 236 21 { substr(bla_wasteForDay(2),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.2','') ne '' && bla_wasteForDay(2) ne '' }
text 236 5 'Mi'
pt 9
text 236 16 { substr(ReadingsVal('Belegungsplan','holidays.2',''),0,12) }
text 236 27 { substr(bla_wasteForDay(2),0,12) }
condition 1
pt 13
rect 281 0 369 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.3','') eq '' && bla_wasteForDay(3) eq '' }
text 325 16 'Do'
condition { ReadingsVal('Belegungsplan','holidays.3','') ne '' && bla_wasteForDay(3) eq '' }
text 325 11 'Do'
pt 9
text 325 21 { substr(ReadingsVal('Belegungsplan','holidays.3',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.3','') eq '' && bla_wasteForDay(3) ne '' }
text 325 11 'Do'
pt 9
text 325 21 { substr(bla_wasteForDay(3),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.3','') ne '' && bla_wasteForDay(3) ne '' }
text 325 5 'Do'
pt 9
text 325 16 { substr(ReadingsVal('Belegungsplan','holidays.3',''),0,12) }
text 325 27 { substr(bla_wasteForDay(3),0,12) }
condition 1
pt 13
rect 369 0 458 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.4','') eq '' && bla_wasteForDay(4) eq '' }
text 413 16 'Fr'
condition { ReadingsVal('Belegungsplan','holidays.4','') ne '' && bla_wasteForDay(4) eq '' }
text 413 11 'Fr'
pt 9
text 413 21 { substr(ReadingsVal('Belegungsplan','holidays.4',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.4','') eq '' && bla_wasteForDay(4) ne '' }
text 413 11 'Fr'
pt 9
text 413 21 { substr(bla_wasteForDay(4),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.4','') ne '' && bla_wasteForDay(4) ne '' }
text 413 5 'Fr'
pt 9
text 413 16 { substr(ReadingsVal('Belegungsplan','holidays.4',''),0,12) }
text 413 27 { substr(bla_wasteForDay(4),0,12) }
condition 1
pt 13
rect 458 0 546 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.5','') eq '' && bla_wasteForDay(5) eq '' }
text 502 16 'Sa'
condition { ReadingsVal('Belegungsplan','holidays.5','') ne '' && bla_wasteForDay(5) eq '' }
text 502 11 'Sa'
pt 9
text 502 21 { substr(ReadingsVal('Belegungsplan','holidays.5',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.5','') eq '' && bla_wasteForDay(5) ne '' }
text 502 11 'Sa'
pt 9
text 502 21 { substr(bla_wasteForDay(5),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.5','') ne '' && bla_wasteForDay(5) ne '' }
text 502 5 'Sa'
pt 9
text 502 16 { substr(ReadingsVal('Belegungsplan','holidays.5',''),0,12) }
text 502 27 { substr(bla_wasteForDay(5),0,12) }
condition 1
pt 13
rect 546 0 635 32 0
thalign 'center'
tvalign 'center'
pt 13
condition { ReadingsVal('Belegungsplan','holidays.6','') eq '' && bla_wasteForDay(6) eq '' }
text 590 16 'So'
condition { ReadingsVal('Belegungsplan','holidays.6','') ne '' && bla_wasteForDay(6) eq '' }
text 590 11 'So'
pt 9
text 590 21 { substr(ReadingsVal('Belegungsplan','holidays.6',''),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.6','') eq '' && bla_wasteForDay(6) ne '' }
text 590 11 'So'
pt 9
text 590 21 { substr(bla_wasteForDay(6),0,12) }
pt 13
condition { ReadingsVal('Belegungsplan','holidays.6','') ne '' && bla_wasteForDay(6) ne '' }
text 590 5 'So'
pt 9
text 590 16 { substr(ReadingsVal('Belegungsplan','holidays.6',''),0,12) }
text 590 27 { substr(bla_wasteForDay(6),0,12) }
condition 1
pt 13
# --- raum 1 ---
rect 0 32 15 76 0
thalign 'center'
tvalign 'center'
pt 13
text 8 54 '1'
pt 9
rect 15 32 104 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 72 92 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 32 93 76 1
line 93 54 104 54 1
thalign 'center'
tvalign 'center'
pt 8
text 99 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 65 { ReadingsVal('Belegungsplan','rooms.0.days.0.persons','') }
rect 104 32 192 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 72 180 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 32 181 76 1
line 181 54 192 54 1
thalign 'center'
tvalign 'center'
pt 8
text 187 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 65 { ReadingsVal('Belegungsplan','rooms.0.days.1.persons','') }
rect 192 32 281 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 72 269 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 32 270 76 1
line 270 54 281 54 1
thalign 'center'
tvalign 'center'
pt 8
text 276 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 65 { ReadingsVal('Belegungsplan','rooms.0.days.2.persons','') }
rect 281 32 369 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 72 357 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 32 358 76 1
line 358 54 369 54 1
thalign 'center'
tvalign 'center'
pt 8
text 364 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 65 { ReadingsVal('Belegungsplan','rooms.0.days.3.persons','') }
rect 369 32 458 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 72 446 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 32 447 76 1
line 447 54 458 54 1
thalign 'center'
tvalign 'center'
pt 8
text 453 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 65 { ReadingsVal('Belegungsplan','rooms.0.days.4.persons','') }
rect 458 32 546 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 72 534 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 32 535 76 1
line 535 54 546 54 1
thalign 'center'
tvalign 'center'
pt 8
text 541 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 65 { ReadingsVal('Belegungsplan','rooms.0.days.5.persons','') }
rect 546 32 635 76 0
condition { ReadingsVal('Belegungsplan','rooms.0.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 72 623 75 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 54 { my $t = ReadingsVal('Belegungsplan','rooms.0.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.0.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 32 624 76 1
line 624 54 635 54 1
thalign 'center'
tvalign 'center'
pt 8
text 630 43 { my $o = ReadingsVal('Belegungsplan','rooms.0.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 65 { ReadingsVal('Belegungsplan','rooms.0.days.6.persons','') }
# --- raum 2 ---
rect 0 76 15 120 0
thalign 'center'
tvalign 'center'
pt 13
text 8 98 '2'
pt 9
rect 15 76 104 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 116 92 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 76 93 120 1
line 93 98 104 98 1
thalign 'center'
tvalign 'center'
pt 8
text 99 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 109 { ReadingsVal('Belegungsplan','rooms.1.days.0.persons','') }
rect 104 76 192 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 116 180 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 76 181 120 1
line 181 98 192 98 1
thalign 'center'
tvalign 'center'
pt 8
text 187 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 109 { ReadingsVal('Belegungsplan','rooms.1.days.1.persons','') }
rect 192 76 281 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 116 269 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 76 270 120 1
line 270 98 281 98 1
thalign 'center'
tvalign 'center'
pt 8
text 276 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 109 { ReadingsVal('Belegungsplan','rooms.1.days.2.persons','') }
rect 281 76 369 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 116 357 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 76 358 120 1
line 358 98 369 98 1
thalign 'center'
tvalign 'center'
pt 8
text 364 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 109 { ReadingsVal('Belegungsplan','rooms.1.days.3.persons','') }
rect 369 76 458 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 116 446 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 76 447 120 1
line 447 98 458 98 1
thalign 'center'
tvalign 'center'
pt 8
text 453 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 109 { ReadingsVal('Belegungsplan','rooms.1.days.4.persons','') }
rect 458 76 546 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 116 534 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 76 535 120 1
line 535 98 546 98 1
thalign 'center'
tvalign 'center'
pt 8
text 541 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 109 { ReadingsVal('Belegungsplan','rooms.1.days.5.persons','') }
rect 546 76 635 120 0
condition { ReadingsVal('Belegungsplan','rooms.1.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 116 623 119 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 98 { my $t = ReadingsVal('Belegungsplan','rooms.1.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.1.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 76 624 120 1
line 624 98 635 98 1
thalign 'center'
tvalign 'center'
pt 8
text 630 87 { my $o = ReadingsVal('Belegungsplan','rooms.1.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 109 { ReadingsVal('Belegungsplan','rooms.1.days.6.persons','') }
# --- raum 3 ---
rect 0 120 15 164 0
thalign 'center'
tvalign 'center'
pt 13
text 8 142 '3'
pt 9
rect 15 120 104 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 160 92 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 120 93 164 1
line 93 142 104 142 1
thalign 'center'
tvalign 'center'
pt 8
text 99 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 153 { ReadingsVal('Belegungsplan','rooms.2.days.0.persons','') }
rect 104 120 192 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 160 180 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 120 181 164 1
line 181 142 192 142 1
thalign 'center'
tvalign 'center'
pt 8
text 187 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 153 { ReadingsVal('Belegungsplan','rooms.2.days.1.persons','') }
rect 192 120 281 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 160 269 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 120 270 164 1
line 270 142 281 142 1
thalign 'center'
tvalign 'center'
pt 8
text 276 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 153 { ReadingsVal('Belegungsplan','rooms.2.days.2.persons','') }
rect 281 120 369 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 160 357 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 120 358 164 1
line 358 142 369 142 1
thalign 'center'
tvalign 'center'
pt 8
text 364 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 153 { ReadingsVal('Belegungsplan','rooms.2.days.3.persons','') }
rect 369 120 458 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 160 446 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 120 447 164 1
line 447 142 458 142 1
thalign 'center'
tvalign 'center'
pt 8
text 453 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 153 { ReadingsVal('Belegungsplan','rooms.2.days.4.persons','') }
rect 458 120 546 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 160 534 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 120 535 164 1
line 535 142 546 142 1
thalign 'center'
tvalign 'center'
pt 8
text 541 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 153 { ReadingsVal('Belegungsplan','rooms.2.days.5.persons','') }
rect 546 120 635 164 0
condition { ReadingsVal('Belegungsplan','rooms.2.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 160 623 163 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 142 { my $t = ReadingsVal('Belegungsplan','rooms.2.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.2.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 120 624 164 1
line 624 142 635 142 1
thalign 'center'
tvalign 'center'
pt 8
text 630 131 { my $o = ReadingsVal('Belegungsplan','rooms.2.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 153 { ReadingsVal('Belegungsplan','rooms.2.days.6.persons','') }
# --- raum 5 ---
rect 0 164 15 208 0
thalign 'center'
tvalign 'center'
pt 13
text 8 186 '5'
pt 9
rect 15 164 104 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 204 92 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 164 93 208 1
line 93 186 104 186 1
thalign 'center'
tvalign 'center'
pt 8
text 99 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 197 { ReadingsVal('Belegungsplan','rooms.4.days.0.persons','') }
rect 104 164 192 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 204 180 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 164 181 208 1
line 181 186 192 186 1
thalign 'center'
tvalign 'center'
pt 8
text 187 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 197 { ReadingsVal('Belegungsplan','rooms.4.days.1.persons','') }
rect 192 164 281 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 204 269 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 164 270 208 1
line 270 186 281 186 1
thalign 'center'
tvalign 'center'
pt 8
text 276 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 197 { ReadingsVal('Belegungsplan','rooms.4.days.2.persons','') }
rect 281 164 369 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 204 357 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 164 358 208 1
line 358 186 369 186 1
thalign 'center'
tvalign 'center'
pt 8
text 364 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 197 { ReadingsVal('Belegungsplan','rooms.4.days.3.persons','') }
rect 369 164 458 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 204 446 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 164 447 208 1
line 447 186 458 186 1
thalign 'center'
tvalign 'center'
pt 8
text 453 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 197 { ReadingsVal('Belegungsplan','rooms.4.days.4.persons','') }
rect 458 164 546 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 204 534 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 164 535 208 1
line 535 186 546 186 1
thalign 'center'
tvalign 'center'
pt 8
text 541 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 197 { ReadingsVal('Belegungsplan','rooms.4.days.5.persons','') }
rect 546 164 635 208 0
condition { ReadingsVal('Belegungsplan','rooms.4.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 204 623 207 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 186 { my $t = ReadingsVal('Belegungsplan','rooms.4.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.4.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 164 624 208 1
line 624 186 635 186 1
thalign 'center'
tvalign 'center'
pt 8
text 630 175 { my $o = ReadingsVal('Belegungsplan','rooms.4.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 197 { ReadingsVal('Belegungsplan','rooms.4.days.6.persons','') }
# --- raum 6 ---
rect 0 208 15 252 0
thalign 'center'
tvalign 'center'
pt 13
text 8 230 '6'
pt 9
rect 15 208 104 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 248 92 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 208 93 252 1
line 93 230 104 230 1
thalign 'center'
tvalign 'center'
pt 8
text 99 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 241 { ReadingsVal('Belegungsplan','rooms.5.days.0.persons','') }
rect 104 208 192 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 248 180 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 208 181 252 1
line 181 230 192 230 1
thalign 'center'
tvalign 'center'
pt 8
text 187 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 241 { ReadingsVal('Belegungsplan','rooms.5.days.1.persons','') }
rect 192 208 281 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 248 269 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 208 270 252 1
line 270 230 281 230 1
thalign 'center'
tvalign 'center'
pt 8
text 276 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 241 { ReadingsVal('Belegungsplan','rooms.5.days.2.persons','') }
rect 281 208 369 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 248 357 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 208 358 252 1
line 358 230 369 230 1
thalign 'center'
tvalign 'center'
pt 8
text 364 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 241 { ReadingsVal('Belegungsplan','rooms.5.days.3.persons','') }
rect 369 208 458 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 248 446 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 208 447 252 1
line 447 230 458 230 1
thalign 'center'
tvalign 'center'
pt 8
text 453 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 241 { ReadingsVal('Belegungsplan','rooms.5.days.4.persons','') }
rect 458 208 546 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 248 534 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 208 535 252 1
line 535 230 546 230 1
thalign 'center'
tvalign 'center'
pt 8
text 541 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 241 { ReadingsVal('Belegungsplan','rooms.5.days.5.persons','') }
rect 546 208 635 252 0
condition { ReadingsVal('Belegungsplan','rooms.5.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 248 623 251 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 230 { my $t = ReadingsVal('Belegungsplan','rooms.5.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.5.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 208 624 252 1
line 624 230 635 230 1
thalign 'center'
tvalign 'center'
pt 8
text 630 219 { my $o = ReadingsVal('Belegungsplan','rooms.5.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 241 { ReadingsVal('Belegungsplan','rooms.5.days.6.persons','') }
# --- raum 7 ---
rect 0 252 15 296 0
thalign 'center'
tvalign 'center'
pt 13
text 8 274 '7'
pt 9
rect 15 252 104 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 292 92 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 252 93 296 1
line 93 274 104 274 1
thalign 'center'
tvalign 'center'
pt 8
text 99 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 285 { ReadingsVal('Belegungsplan','rooms.6.days.0.persons','') }
rect 104 252 192 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 292 180 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 252 181 296 1
line 181 274 192 274 1
thalign 'center'
tvalign 'center'
pt 8
text 187 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 285 { ReadingsVal('Belegungsplan','rooms.6.days.1.persons','') }
rect 192 252 281 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 292 269 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 252 270 296 1
line 270 274 281 274 1
thalign 'center'
tvalign 'center'
pt 8
text 276 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 285 { ReadingsVal('Belegungsplan','rooms.6.days.2.persons','') }
rect 281 252 369 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 292 357 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 252 358 296 1
line 358 274 369 274 1
thalign 'center'
tvalign 'center'
pt 8
text 364 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 285 { ReadingsVal('Belegungsplan','rooms.6.days.3.persons','') }
rect 369 252 458 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 292 446 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 252 447 296 1
line 447 274 458 274 1
thalign 'center'
tvalign 'center'
pt 8
text 453 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 285 { ReadingsVal('Belegungsplan','rooms.6.days.4.persons','') }
rect 458 252 546 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 292 534 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 252 535 296 1
line 535 274 546 274 1
thalign 'center'
tvalign 'center'
pt 8
text 541 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 285 { ReadingsVal('Belegungsplan','rooms.6.days.5.persons','') }
rect 546 252 635 296 0
condition { ReadingsVal('Belegungsplan','rooms.6.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 292 623 295 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 274 { my $t = ReadingsVal('Belegungsplan','rooms.6.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.6.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 252 624 296 1
line 624 274 635 274 1
thalign 'center'
tvalign 'center'
pt 8
text 630 263 { my $o = ReadingsVal('Belegungsplan','rooms.6.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 285 { ReadingsVal('Belegungsplan','rooms.6.days.6.persons','') }
# --- raum 8 ---
rect 0 296 15 340 0
thalign 'center'
tvalign 'center'
pt 13
text 8 318 '8'
pt 9
rect 15 296 104 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 336 92 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 296 93 340 1
line 93 318 104 318 1
thalign 'center'
tvalign 'center'
pt 8
text 99 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 329 { ReadingsVal('Belegungsplan','rooms.7.days.0.persons','') }
rect 104 296 192 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 336 180 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 296 181 340 1
line 181 318 192 318 1
thalign 'center'
tvalign 'center'
pt 8
text 187 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 329 { ReadingsVal('Belegungsplan','rooms.7.days.1.persons','') }
rect 192 296 281 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 336 269 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 296 270 340 1
line 270 318 281 318 1
thalign 'center'
tvalign 'center'
pt 8
text 276 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 329 { ReadingsVal('Belegungsplan','rooms.7.days.2.persons','') }
rect 281 296 369 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 336 357 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 296 358 340 1
line 358 318 369 318 1
thalign 'center'
tvalign 'center'
pt 8
text 364 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 329 { ReadingsVal('Belegungsplan','rooms.7.days.3.persons','') }
rect 369 296 458 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 336 446 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 296 447 340 1
line 447 318 458 318 1
thalign 'center'
tvalign 'center'
pt 8
text 453 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 329 { ReadingsVal('Belegungsplan','rooms.7.days.4.persons','') }
rect 458 296 546 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 336 534 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 296 535 340 1
line 535 318 546 318 1
thalign 'center'
tvalign 'center'
pt 8
text 541 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 329 { ReadingsVal('Belegungsplan','rooms.7.days.5.persons','') }
rect 546 296 635 340 0
condition { ReadingsVal('Belegungsplan','rooms.7.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 336 623 339 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 318 { my $t = ReadingsVal('Belegungsplan','rooms.7.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.7.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 296 624 340 1
line 624 318 635 318 1
thalign 'center'
tvalign 'center'
pt 8
text 630 307 { my $o = ReadingsVal('Belegungsplan','rooms.7.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 329 { ReadingsVal('Belegungsplan','rooms.7.days.6.persons','') }
# --- raum 9 ---
rect 0 340 15 384 0
thalign 'center'
tvalign 'center'
pt 13
text 8 362 '9'
pt 9
rect 15 340 104 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.0.text','') ne '' }
rgb 'FF0000'
rect 16 380 92 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 59 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.0.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.0.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 93 340 93 384 1
line 93 362 104 362 1
thalign 'center'
tvalign 'center'
pt 8
text 99 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.0.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 99 373 { ReadingsVal('Belegungsplan','rooms.8.days.0.persons','') }
rect 104 340 192 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.1.text','') ne '' }
rgb 'FF0000'
rect 105 380 180 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 148 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.1.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.1.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 181 340 181 384 1
line 181 362 192 362 1
thalign 'center'
tvalign 'center'
pt 8
text 187 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.1.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 187 373 { ReadingsVal('Belegungsplan','rooms.8.days.1.persons','') }
rect 192 340 281 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.2.text','') ne '' }
rgb 'FF0000'
rect 193 380 269 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 236 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.2.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.2.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 270 340 270 384 1
line 270 362 281 362 1
thalign 'center'
tvalign 'center'
pt 8
text 276 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.2.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 276 373 { ReadingsVal('Belegungsplan','rooms.8.days.2.persons','') }
rect 281 340 369 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.3.text','') ne '' }
rgb 'FF0000'
rect 282 380 357 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 325 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.3.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.3.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 358 340 358 384 1
line 358 362 369 362 1
thalign 'center'
tvalign 'center'
pt 8
text 364 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.3.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 364 373 { ReadingsVal('Belegungsplan','rooms.8.days.3.persons','') }
rect 369 340 458 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.4.text','') ne '' }
rgb 'FF0000'
rect 370 380 446 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 413 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.4.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.4.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 447 340 447 384 1
line 447 362 458 362 1
thalign 'center'
tvalign 'center'
pt 8
text 453 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.4.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 453 373 { ReadingsVal('Belegungsplan','rooms.8.days.4.persons','') }
rect 458 340 546 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.5.text','') ne '' }
rgb 'FF0000'
rect 459 380 534 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 502 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.5.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.5.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 535 340 535 384 1
line 535 362 546 362 1
thalign 'center'
tvalign 'center'
pt 8
text 541 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.5.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 541 373 { ReadingsVal('Belegungsplan','rooms.8.days.5.persons','') }
rect 546 340 635 384 0
condition { ReadingsVal('Belegungsplan','rooms.8.days.6.text','') ne '' }
rgb 'FF0000'
rect 547 380 623 383 1
rgb 000000
condition 1
thalign 'center'
tvalign 'center'
pt 9
text 590 362 { my $t = ReadingsVal('Belegungsplan','rooms.8.days.6.text',''); my $a = ReadingsVal('Belegungsplan','rooms.8.days.6.arrival',''); $t eq '' ? '' : ($a eq '1' ? (length($t) > 9 ? substr($t,0,8) . '...' : $t) : 'x') }
line 624 340 624 384 1
line 624 362 635 362 1
thalign 'center'
tvalign 'center'
pt 8
text 630 351 { my $o = ReadingsVal('Belegungsplan','rooms.8.days.6.origin',''); $o eq '' ? '' : substr($o,0,1) }
text 630 373 { ReadingsVal('Belegungsplan','rooms.8.days.6.persons','') }
Das ist auch der richtige Weg: Ein LLM als Sparringspartner zu benutzen. Das ist heute Standard bei den meisten Programmierarbeiten, in allen Naturwissenschaften und vielen weiteren Bereichen.
Vor allem: Das unterscheidet sich um Lichtjahre von dem Unsinn, den dieser tobbse vorher geschrieben hat.
LG
pah