<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/index.php?action=history&amp;feed=atom&amp;title=Fhem-cms</id>
	<title>Fhem-cms - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/index.php?action=history&amp;feed=atom&amp;title=Fhem-cms"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;action=history"/>
	<updated>2026-11-11T06:08:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FHEMWiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41371&amp;oldid=prev</id>
		<title>Stefan.apetz am 10. November 2026 um 17:44 Uhr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41371&amp;oldid=prev"/>
		<updated>2026-11-10T17:44:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 10. November 2026, 18:44 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wikitable&lt;/del&gt;&quot; style=&quot;float:right; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;clear&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;right&lt;/del&gt;; width:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;22em; margin:0 0 1em 1em&lt;/del&gt;;&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{| class=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;float-right infobox toccolours&lt;/ins&gt;&quot; style=&quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;margin:0 0 1em 1em; &lt;/ins&gt;float:right; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;border-style&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;solid&lt;/ins&gt;; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;border-&lt;/ins&gt;width:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;1px&lt;/ins&gt;;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; width=&quot;300&lt;/ins&gt;&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&quot;2&quot; | FHEMCMS – fhem-cms&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! colspan=&quot;2&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; style=&quot;background-color:#EFEFFF&lt;/ins&gt;&quot; | FHEMCMS – fhem-cms&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;style=&quot;background-color:#EFEFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Zweck / Funktion&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;colspan=&quot;2&quot; | &lt;/ins&gt;Zweck / Funktion&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Browserbasierte Bedienoberfläche mit grafischem Seiteneditor, Widgets, Live-Werten und Assetmanager.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|- style=&quot;background-color:#FFFFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| colspan=&quot;2&quot; &lt;/ins&gt;| Browserbasierte Bedienoberfläche mit grafischem Seiteneditor, Widgets, Live-Werten und Assetmanager.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Typ&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;style=&quot;background-color:#EFEFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;colspan=&quot;2&quot; | Allgemein&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|- style=&quot;background-color:#FFFFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &lt;/ins&gt;Typ&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Inoffizielles Modul; Installation aus externer Updatequelle.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Inoffizielles Modul; Installation aus externer Updatequelle.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;style=&quot;background-color:#EFEFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Dokumentation&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;colspan=&quot;2&quot; | Details&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|- style=&quot;background-color:#FFFFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &lt;/ins&gt;Dokumentation&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz/fhem-cms/wiki GitHub-Wiki / Anwenderhandbuch]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz/fhem-cms/wiki GitHub-Wiki / Anwenderhandbuch]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;style=&quot;background-color:#FFFFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! &lt;/del&gt;Modulname&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &lt;/ins&gt;Modulname&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;01_FHEMCMS.pm&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;lt;code&amp;gt;01_FHEMCMS.pm&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;style=&quot;background-color:#FFFFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! &lt;/del&gt;Ersteller / Betreuung&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &lt;/ins&gt;Ersteller / Betreuung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz stapetz]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz stapetz]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;style=&quot;background-color:#FFFFFF&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! &lt;/del&gt;Projekt&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| &lt;/ins&gt;Projekt&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz/fhem-cms GitHub-Repository]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz/fhem-cms GitHub-Repository]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|- style=&quot;background-color:#7FFFD4&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| colspan=&quot;2&quot; | &#039;&#039;&#039;Wichtig:&#039;&#039;&#039; Beachte die zum installierten Modul gehörende englische Beschreibung in der lokalen &#039;&#039;commandref&#039;&#039;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Modul (Inoffiziell)]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Kategorie:Modul (Inoffiziell)]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key c1fhemwiki:diff:1.41:old-41366:rev-41371:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Stefan.apetz</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41366&amp;oldid=prev</id>
		<title>Stefan.apetz am 10. November 2026 um 17:11 Uhr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41366&amp;oldid=prev"/>
		<updated>2026-11-10T17:11:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 10. November 2026, 18:11 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l500&quot;&gt;Zeile 500:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 500:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nenne bei Fehlerberichten Version, Browser, Ansichtsmodus, erwartetes und tatsächliches Verhalten sowie reproduzierbare Schritte. Bei Layoutproblemen helfen Fensterbreite und Zoomfaktor. Entferne Zugangsdaten und private Informationen aus Logs und Screenshots.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Nenne bei Fehlerberichten Version, Browser, Ansichtsmodus, erwartetes und tatsächliches Verhalten sowie reproduzierbare Schritte. Bei Layoutproblemen helfen Fensterbreite und Zoomfaktor. Entferne Zugangsdaten und private Informationen aus Logs und Screenshots.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:FHEM Frontends]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key c1fhemwiki:diff:1.41:old-41365:rev-41366:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Stefan.apetz</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41365&amp;oldid=prev</id>
		<title>Stefan.apetz am 10. November 2026 um 17:07 Uhr</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41365&amp;oldid=prev"/>
		<updated>2026-11-10T17:07:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 10. November 2026, 18:07 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Zeile 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{Infobox Modul&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| class=&quot;wikitable&quot; style=&quot;float:right; clear:right; width:22em; margin:0 0 1em 1em;&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ModPurpose=&lt;/del&gt;Browserbasierte Bedienoberfläche &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;für FHEM &lt;/del&gt;mit grafischem Seiteneditor, Widgets, Live-Werten und &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;gemeinsamem &lt;/del&gt;Assetmanager.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! colspan=&quot;2&quot; | FHEMCMS – fhem-cms&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ModType=x&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ModCmdRef=FHEMCMS&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Zweck / Funktion&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ModTechName=&lt;/del&gt;01_FHEMCMS.pm&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Browserbasierte Bedienoberfläche mit grafischem Seiteneditor, Widgets, Live-Werten und Assetmanager.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ModOwner=&lt;/del&gt;[https://github.com/stapetz stapetz]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Typ&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Inoffizielles Modul; Installation aus externer Updatequelle.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Dokumentation&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| [https://github.com/stapetz/fhem-cms/wiki GitHub-Wiki / Anwenderhandbuch]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Modulname&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&lt;/ins&gt;01_FHEMCMS.pm&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Ersteller / Betreuung&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [https://github.com/stapetz stapetz]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;! Projekt&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| [https://github.com/stapetz/fhem-cms GitHub-Repository]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/ins&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:Modul (Inoffiziell)]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;fhem-cms&amp;#039;&amp;#039;&amp;#039; ergänzt FHEM um eine frei gestaltbare Bedienoberfläche im Browser. Du kombinierst Gerätewerte, Bedienelemente, Texte, Bilder und Links auf eigenen Seiten. Das Layout erstellst du grafisch, ohne dafür eine komplette HTML-Oberfläche programmieren zu müssen.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;fhem-cms&amp;#039;&amp;#039;&amp;#039; ergänzt FHEM um eine frei gestaltbare Bedienoberfläche im Browser. Du kombinierst Gerätewerte, Bedienelemente, Texte, Bilder und Links auf eigenen Seiten. Das Layout erstellst du grafisch, ohne dafür eine komplette HTML-Oberfläche programmieren zu müssen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key c1fhemwiki:diff:1.41:old-41363:rev-41365:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Stefan.apetz</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41363&amp;oldid=prev</id>
		<title>Stefan.apetz: Stefan.apetz verschob die Seite Fhem-cms-frontend nach Fhem-cms und überschrieb dabei eine Weiterleitung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41363&amp;oldid=prev"/>
		<updated>2026-11-10T17:01:38Z</updated>

		<summary type="html">&lt;p&gt;Stefan.apetz verschob die Seite &lt;a href=&quot;/wiki/Fhem-cms-frontend&quot; title=&quot;Fhem-cms-frontend&quot;&gt;Fhem-cms-frontend&lt;/a&gt; nach &lt;a href=&quot;/wiki/Fhem-cms&quot; title=&quot;Fhem-cms&quot;&gt;Fhem-cms&lt;/a&gt; und überschrieb dabei eine Weiterleitung&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 10. November 2026, 18:01 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key c1fhemwiki:diff:1.41:old-41361:rev-41363 --&gt;
&lt;/table&gt;</summary>
		<author><name>Stefan.apetz</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41361&amp;oldid=prev</id>
		<title>Stefan.apetz: Stefan.apetz verschob die Seite Fhem-cms nach Fhem-cms-frontend</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41361&amp;oldid=prev"/>
		<updated>2026-11-10T17:01:16Z</updated>

		<summary type="html">&lt;p&gt;Stefan.apetz verschob die Seite &lt;a href=&quot;/wiki/Fhem-cms&quot; title=&quot;Fhem-cms&quot;&gt;Fhem-cms&lt;/a&gt; nach &lt;a href=&quot;/wiki/Fhem-cms-frontend&quot; title=&quot;Fhem-cms-frontend&quot;&gt;Fhem-cms-frontend&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 10. November 2026, 18:01 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key c1fhemwiki:diff:1.41:old-41360:rev-41361 --&gt;
&lt;/table&gt;</summary>
		<author><name>Stefan.apetz</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41360&amp;oldid=prev</id>
		<title>Stefan.apetz: Frontend Modul fhem-cms</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Fhem-cms&amp;diff=41360&amp;oldid=prev"/>
		<updated>2026-11-10T17:00:26Z</updated>

		<summary type="html">&lt;p&gt;Frontend Modul fhem-cms&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Browserbasierte Bedienoberfläche für FHEM mit grafischem Seiteneditor, Widgets, Live-Werten und gemeinsamem Assetmanager.&lt;br /&gt;
|ModType=x&lt;br /&gt;
|ModCmdRef=FHEMCMS&lt;br /&gt;
|ModTechName=01_FHEMCMS.pm&lt;br /&gt;
|ModOwner=[https://github.com/stapetz stapetz]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;fhem-cms&amp;#039;&amp;#039;&amp;#039; ergänzt FHEM um eine frei gestaltbare Bedienoberfläche im Browser. Du kombinierst Gerätewerte, Bedienelemente, Texte, Bilder und Links auf eigenen Seiten. Das Layout erstellst du grafisch, ohne dafür eine komplette HTML-Oberfläche programmieren zu müssen.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt den stabilen Funktionsstand &amp;#039;&amp;#039;&amp;#039;1.6.1&amp;#039;&amp;#039;&amp;#039; und das aktuelle Seitenformat &amp;#039;&amp;#039;&amp;#039;Schema 5&amp;#039;&amp;#039;&amp;#039;. Das ausführliche, bebilderte [https://github.com/stapetz/fhem-cms/wiki GitHub-Handbuch] enthält zusätzliche Beispiele und Screenshots aller Widgettypen und ihrer Einstellungsdialoge.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Idee und Funktionsumfang ==&lt;br /&gt;
&lt;br /&gt;
Statt technische Geräteseiten einzeln aufzurufen, ordnest du Informationen nach Räumen oder Themen:&lt;br /&gt;
&lt;br /&gt;
* Eine Startseite zeigt wichtige Zustände und Schnellzugriffe.&lt;br /&gt;
* Raumseiten bündeln Temperatur, Heizung, Beleuchtung und Fensterkontakte.&lt;br /&gt;
* Energieübersichten verbinden Tabellen, historische Diagramme und SolarFlow.&lt;br /&gt;
* Informationsseiten enthalten Anleitungen, Bilder und aktuelle FHEM-Werte im Fließtext.&lt;br /&gt;
* Linkkacheln führen zu anderen CMS-Seiten, Webseiten oder Dokumenten.&lt;br /&gt;
&lt;br /&gt;
Das FHEM-Modul übernimmt Datenzugriff und Speicherung; der Browser stellt die Oberfläche dar. Das CMS verwendet FHEMWEB und dessen Sitzung. Ein zusätzlicher Cloud-Dienst ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
FHEM bleibt für Geräte, Automatisierungen, Berechtigungen und die Aufzeichnung historischer Daten zuständig. Das CMS ersetzt diese Funktionen nicht.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen und Sicherheit ==&lt;br /&gt;
&lt;br /&gt;
* FHEM 6.5 oder neuer und ein laufendes FHEMWEB.&lt;br /&gt;
* Ein aktueller Browser mit ES-Modulen, Web Components und HTML-Dialogen.&lt;br /&gt;
* Schreibrechte des FHEM-Betriebssystemkontos in den CMS-Daten- und Medienverzeichnissen.&lt;br /&gt;
* Für historische Diagramme: bereits vorhandene Aufzeichnungen in DbLog oder FileLog.&lt;br /&gt;
&lt;br /&gt;
Die Projektanleitung nennt Perl 5.40 als getestete Umgebung, nicht als einzig mögliche Laufzeit. Für die normale Installation brauchst du weder Node.js noch einen eigenen Frontend-Build.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtig: FHEMWEB ist die Sicherheitsgrenze.&amp;#039;&amp;#039;&amp;#039; Es gibt keine separate CMS-Anmeldung. Richte Anmeldung, geschützten Transport und passende FHEM-Rechte ein, bevor du die Oberfläche außerhalb eines vertrauenswürdigen Netzes verwendest.&lt;br /&gt;
&lt;br /&gt;
* Eine ausgeblendete Navigation oder eine Seite ohne Editor ist &amp;#039;&amp;#039;&amp;#039;keine Zugriffssperre&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;lt;code&amp;gt;?mode=edit&amp;lt;/code&amp;gt; schaltet die Ansicht um, ist aber keine Berechtigungsprüfung.&lt;br /&gt;
* Eine eigenständige CMS-Rollenverwaltung für Leser und Bearbeiter ist nicht vorauszusetzen.&lt;br /&gt;
* Bedienelemente können reale Geräte schalten. Auch die Vorschau ist nicht automatisch ein Simulationsmodus.&lt;br /&gt;
* Zugangsdaten, Tokens und sensible Metadaten gehören nicht in öffentliche Widgets, Screenshots oder Fehlerberichte.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Erstelle zunächst eine vollständige Sicherung deiner FHEM-Installation.&lt;br /&gt;
&lt;br /&gt;
Die folgenden Befehle gibst du in die &amp;#039;&amp;#039;&amp;#039;FHEM-Befehlszeile&amp;#039;&amp;#039;&amp;#039; ein, nicht in ein Betriebssystemterminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update add https://raw.githubusercontent.com/stapetz/fhem-cms/main/controls_fhem-cms.txt&lt;br /&gt;
update all https://raw.githubusercontent.com/stapetz/fhem-cms/main/controls_fhem-cms.txt&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Adresse zeigt auf eine &amp;#039;&amp;#039;&amp;#039;Controls-Datei&amp;#039;&amp;#039;&amp;#039;, nicht direkt auf die Moduldatei. Dadurch werden Modul, Perl-Helfer und Frontend zusammen installiert. Der Neustart unterbricht FHEM kurz.&lt;br /&gt;
&lt;br /&gt;
Nach dem Neustart legst du ein CMS-Device an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define CMS fhemcms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CMS&amp;lt;/code&amp;gt; ist ein Beispielname. Ersetze ihn bei Bedarf in allen Befehlen durch deinen eigenen Device-Namen. Speichere anschließend die FHEM-Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Das Device erscheint standardmäßig im Raum &amp;#039;&amp;#039;&amp;#039;FHEM CMS&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Einstieg am Device !! Funktion&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;CMS starten&amp;#039;&amp;#039;&amp;#039; || Öffnet den Bearbeitungsmodus.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Zeige Homepage&amp;#039;&amp;#039;&amp;#039; || Öffnet den veröffentlichten Stand.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;get CMS url&amp;lt;/code&amp;gt; || Zeigt den relativen Homepagepfad.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bei FHEMWEB-Webname &amp;lt;code&amp;gt;fhem&amp;lt;/code&amp;gt; und Device &amp;lt;code&amp;gt;CMS&amp;lt;/code&amp;gt; lauten typische Pfade:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/fhem/fhem-cms/CMS/index.html&lt;br /&gt;
/fhem/fhem-cms/CMS/index.html?mode=edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verwende bevorzugt die erzeugten Device-Links, da Host, Port und Webname von deiner Installation abhängen. Die Modulversion findest du im Internal &amp;#039;&amp;#039;&amp;#039;VERSION&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Erste Seite erstellen ==&lt;br /&gt;
&lt;br /&gt;
# Öffne am CMS-Device &amp;#039;&amp;#039;&amp;#039;CMS starten&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Wähle &amp;#039;&amp;#039;&amp;#039;Bearbeiten → Widget hinzufügen → Wert&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Suche ein vorhandenes FHEM-Device und wähle dessen gewünschtes Reading.&lt;br /&gt;
# Trage einen Titel und gegebenenfalls eine Einheit ein, beispielsweise „Außentemperatur“ und „°C“.&lt;br /&gt;
# Bestätige mit &amp;#039;&amp;#039;&amp;#039;Speichern&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Verschiebe das Widget am Punktgriff und ändere seine Größe am Griff unten rechts.&lt;br /&gt;
# Ergänze bei Bedarf ein &amp;#039;&amp;#039;&amp;#039;Textwidget&amp;#039;&amp;#039;&amp;#039; als Überschrift oder Einleitung.&lt;br /&gt;
# Kontrolliere den Entwurf unter &amp;#039;&amp;#039;&amp;#039;Ansicht → Vorschau&amp;#039;&amp;#039;&amp;#039; und in der Geräte-Vorschau.&lt;br /&gt;
# Wähle &amp;#039;&amp;#039;&amp;#039;Datei → Entwurf veröffentlichen&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Öffne die Homepage neu.&lt;br /&gt;
&lt;br /&gt;
Device- und Reading-Namen werden nicht automatisch angelegt. Wähle die tatsächlich vorhandenen Quellen deiner FHEM-Installation.&lt;br /&gt;
&lt;br /&gt;
== Editor, Entwurf und Veröffentlichung ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ansicht !! Angezeigter Stand !! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| Homepage ohne Modusparameter || Live || Veröffentlichte Oberfläche bedienen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;?mode=edit&amp;lt;/code&amp;gt; || Entwurf bzw. Ausgangsstand || Seiten und Widgets bearbeiten.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;?mode=preview&amp;lt;/code&amp;gt; || Entwurf || Entwurf ohne Editorwerkzeuge prüfen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Speichern ist nicht Veröffentlichen:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Speichern&amp;#039;&amp;#039;&amp;#039; im Widgetdialog übernimmt Änderungen in den Entwurf.&lt;br /&gt;
* Verschieben und Skalieren werden automatisch als Entwurf gespeichert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Abbrechen&amp;#039;&amp;#039;&amp;#039; verwirft noch nicht gespeicherte Dialogeingaben.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Entwurf veröffentlichen&amp;#039;&amp;#039;&amp;#039; ersetzt den Live-Stand; der bisherige Live-Stand wird gesichert.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Entwurf verwerfen&amp;#039;&amp;#039;&amp;#039; entfernt den Entwurf, nicht die Live-Konfiguration.&lt;br /&gt;
&lt;br /&gt;
Ein CMS-Device hat &amp;#039;&amp;#039;&amp;#039;einen gemeinsamen Entwurf&amp;#039;&amp;#039;&amp;#039;, nicht einen eigenen je Browser. Bei Konflikten oder einer unklaren Speicherbestätigung lädst du den aktuellen Zustand neu, statt mehrfach zu speichern.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Menü !! Typische Aufgaben&lt;br /&gt;
|-&lt;br /&gt;
| Datei || Veröffentlichen, Verwerfen, Assetmanager, Sicherungen und Wiederherstellung.&lt;br /&gt;
|-&lt;br /&gt;
| Bearbeiten || Seiteneinstellungen, Widget hinzufügen, Widgets automatisch anordnen.&lt;br /&gt;
|-&lt;br /&gt;
| Ansicht || Vorschau und Rasteranzeige.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Widgetwerkzeuge erscheinen auf Mausgeräten beim Überfahren oder Tastaturfokus; auf Touchgeräten ohne Hover bleiben sie sichtbar. Über den Stift öffnest du die Einstellungen, über den Seitenwechselknopf verschiebst du ein Widget auf eine andere Seite.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ausnahme Assetmanager:&amp;#039;&amp;#039;&amp;#039; Uploads, Umbenennen, Verschieben und Löschen gelten sofort, unabhängig vom Seitenentwurf.&lt;br /&gt;
&lt;br /&gt;
== Seiten, Navigation und Layout ==&lt;br /&gt;
&lt;br /&gt;
Die Navigation ist ein gemeinsames Widget für alle Seiten des CMS-Devices. Öffne dessen Stiftsymbol, um Seiten zu erstellen, umzubenennen, umzusortieren oder in der Navigation auszublenden.&lt;br /&gt;
&lt;br /&gt;
* Ausgeblendete Seiten bleiben über ihren Link erreichbar und sind nicht geschützt.&lt;br /&gt;
* Zum Löschen einer Seite entfernst oder verschiebst du zunächst ihre Widgets und änderst referenzierende LinkWidget-Kacheln.&lt;br /&gt;
* Die letzte verbleibende Seite kann nicht einfach entfernt werden.&lt;br /&gt;
* Die Navigation lässt sich horizontal oder vertikal ausrichten, verschieben und skalieren.&lt;br /&gt;
* Bei Platzmangel erscheint ein aufklappbares Burger-Menü.&lt;br /&gt;
* Eine vergrößerte gemeinsame Navigation kann kollidierende Widgets auf allen Seiten nach unten verschieben.&lt;br /&gt;
&lt;br /&gt;
Unter &amp;#039;&amp;#039;&amp;#039;Bearbeiten → Seiteneinstellungen&amp;#039;&amp;#039;&amp;#039; legst du Theme, Widgetrahmen, globale Titelausrichtung und Rasterdichte fest. Möglich sind &amp;#039;&amp;#039;&amp;#039;12, 24, 48, 96 oder 192 Spalten&amp;#039;&amp;#039;&amp;#039;. Die gemeinsamen Einstellungen gelten für alle Seiten des CMS-Devices.&lt;br /&gt;
&lt;br /&gt;
Widgettitel lassen sich global links, zentriert oder rechts ausrichten. Ob ein Titel sichtbar ist, bestimmst du weiterhin am einzelnen Widget. Frei formatierte Überschriften im Textinhalt sind davon unabhängig.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bearbeiten → Widgets automatisch anordnen&amp;#039;&amp;#039;&amp;#039; rückt die Widgets der aktuellen Seite nach oben und links. Größen und Inhalte bleiben erhalten; die Änderung landet im Entwurf.&lt;br /&gt;
&lt;br /&gt;
=== Fenstergröße, Zoom und mobile Ansicht ===&lt;br /&gt;
&lt;br /&gt;
Navigation und Widgets skalieren gemeinsam mit der verfügbaren Breite. Browserzoom vergrößert oder verkleinert die Darstellung; bei Platzmangel kann der Rasterbereich seitlich scrollen.&lt;br /&gt;
&lt;br /&gt;
Bis einschließlich &amp;#039;&amp;#039;&amp;#039;600 Pixel Inhaltsbreite&amp;#039;&amp;#039;&amp;#039; ordnen Homepage und Vorschau die Widgets in Leserichtung mit Zeilenumbruch an. Der Editor bleibt zum präzisen Positionieren beim exakten Raster. Das Drehen des Geräts verändert keine gespeicherten Rasterpositionen.&lt;br /&gt;
&lt;br /&gt;
Prüfe vor der Veröffentlichung Desktop, Smartphone, Hoch-/Querformat und Browserzoom. Die Geräte-Vorschau hilft dabei, ersetzt aber nicht jeden Test auf dem Zielgerät.&lt;br /&gt;
&lt;br /&gt;
== Widgetübersicht ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Widget !! Aufgabe und wichtige Hinweise&lt;br /&gt;
|-&lt;br /&gt;
| Wert || Ein einzelnes Reading mit optionalem Icon und Einheit groß anzeigen; keine Gerätebedienung.&lt;br /&gt;
|-&lt;br /&gt;
| Uhr / Datum || Browserzeit digital oder analog darstellen; Datum, Sekunden und Wochentag optional.&lt;br /&gt;
|-&lt;br /&gt;
| Status-Symbol || Exakte Readingwerte passenden Icons und Farben zuordnen; reine Anzeige.&lt;br /&gt;
|-&lt;br /&gt;
| Thermostat || Ist-/Solltemperatur, Sollwertregler, Betriebsart, Ventil und Batterie je nach verfügbaren Geräteinformationen.&lt;br /&gt;
|-&lt;br /&gt;
| Schalter || Mit den angebotenen An-/Aus-Befehlen schalten; Standarddarstellung „Nur Symbol“, Beschriftung optional.&lt;br /&gt;
|-&lt;br /&gt;
| Taster || Einen angebotenen Befehl ohne Parameter auslösen, etwa &amp;lt;code&amp;gt;toggle&amp;lt;/code&amp;gt;; Standardsymbol passend zum Befehl.&lt;br /&gt;
|-&lt;br /&gt;
| Schieberegler || Einen Set-Befehl mit Sliderdeklaration bedienen; Bereich und Schrittweite vom Device.&lt;br /&gt;
|-&lt;br /&gt;
| Tabelle || Mehrere Readings mit eigenen Bezeichnern, Einheiten, Überschriften und optionaler Summe.&lt;br /&gt;
|-&lt;br /&gt;
| Diagramm || Geloggte numerische Messwerte aus DbLog oder FileLog darstellen.&lt;br /&gt;
|-&lt;br /&gt;
| SolarFlow || Leistungen zwischen PV, Haus, Netz und Batterie sowie optional den Batterieladestand visualisieren.&lt;br /&gt;
|-&lt;br /&gt;
| Text || Formatierten Text, Bilder, Links, Tabellen und Live-Platzhalter kombinieren.&lt;br /&gt;
|-&lt;br /&gt;
| Freies HTML || Bereinigtes HTML mit Live-Werten und zustandsabhängigen Farben; keine freie Skriptausführung.&lt;br /&gt;
|-&lt;br /&gt;
| LinkWidget || Interne Seiten, externe Webseiten oder Dokumente als Text-/Bildkacheln anbieten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Alle Widgetaufnahmen und Einstellungsdialoge findest du in der [https://github.com/stapetz/fhem-cms/wiki/Widgets bebilderten Widgetübersicht].&lt;br /&gt;
&lt;br /&gt;
=== Geräte und Befehle richtig zuordnen ===&lt;br /&gt;
&lt;br /&gt;
Nach einem Gerätewechsel prüfst du die neu angebotenen Readings und Set-Befehle. Beim Thermostat richten sich Solltemperaturbereich und Betriebsarten nach dem ausgewählten Gerät; gegebenenfalls werden dessen Kanäle berücksichtigt.&lt;br /&gt;
&lt;br /&gt;
Schalter und Taster sind im Editor nicht zum Schalten vorgesehen. In der normalen Ansicht können sie reale Geräte bedienen.&lt;br /&gt;
&lt;br /&gt;
Ein Slider benötigt eine passende Deklaration in der Set-Liste, beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pct:slider,0,1,100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet Minimum 0, Schrittweite 1 und Maximum 100. Eine reine Werteliste genügt dafür derzeit nicht. Slideränderungen werden 1,5 Sekunden nach der letzten Bewegung gesendet.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Einheiten sind meist Beschriftungen, keine Umrechnung.&amp;#039;&amp;#039;&amp;#039; Die Auswahl „kWh“ wandelt einen Readingwert in Wh nicht automatisch um.&lt;br /&gt;
&lt;br /&gt;
=== SolarFlow ===&lt;br /&gt;
&lt;br /&gt;
Die PV-Leistung ist Pflicht; andere Quellen sind optional. Du kannst Werte aus einem Device oder aus mehreren Devices zuordnen. Ohne Hausverbrauchsreading kann der Hausverbrauch berechnet werden.&lt;br /&gt;
&lt;br /&gt;
* Netzleistung: negativ bedeutet Bezug, positiv Einspeisung.&lt;br /&gt;
* Batterieleistung: positiv bedeutet Laden, negativ Entladen.&lt;br /&gt;
* Die W-/kW-Einstellung muss zu den Quellreadings passen.&lt;br /&gt;
* Fehlende Netz-/Batteriequellen blenden die betreffende Station aus.&lt;br /&gt;
&lt;br /&gt;
Prüfe die Richtung an einem bekannten Betriebszustand; Hersteller verwenden nicht immer dieselbe Vorzeichenkonvention.&lt;br /&gt;
&lt;br /&gt;
=== LinkWidget ===&lt;br /&gt;
&lt;br /&gt;
Ein LinkWidget enthält 1 bis 200 Kacheln. Jede Kachel braucht einen Linktext, auch wenn dieser ausgeblendet ist. Ziele sind interne CMS-Seiten, externe HTTP-/HTTPS-Adressen und Dokumente aus dem Assetmanager.&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog ordnest du die Kacheln in einem eigenen &amp;#039;&amp;#039;&amp;#039;12-Spalten-Raster&amp;#039;&amp;#039;&amp;#039; an. Verschieben erfolgt am Griff, Skalieren an der Ecke. Überlappungen sind nicht speicherbar.&lt;br /&gt;
&lt;br /&gt;
Das innere Linkraster ist unabhängig vom äußeren Seitenraster. Ein „neues Fenster“ kann aufgrund von Browserregeln auch als Tab erscheinen.&lt;br /&gt;
&lt;br /&gt;
== Text, Bilder und Live-Platzhalter ==&lt;br /&gt;
&lt;br /&gt;
Das Textwidget bietet einen WYSIWYG-Editor mit Textformatierung, Überschriften, Listen, Farben, Links, Bildern und Tabellen.&lt;br /&gt;
&lt;br /&gt;
* Über &amp;#039;&amp;#039;&amp;#039;Bild&amp;#039;&amp;#039;&amp;#039; öffnest du den gemeinsamen Assetmanager.&lt;br /&gt;
* Ein eingefügtes Bild kannst du anklicken, links/mittig/rechts ausrichten und proportional skalieren.&lt;br /&gt;
* Über &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki&amp;gt;{{ }}&amp;lt;/nowiki&amp;gt;&amp;#039;&amp;#039;&amp;#039; fügst du einen Live-Platzhalter ein.&lt;br /&gt;
* Im Editor erscheint dieser als grüner Baustein; ein Klick darauf öffnet seine Einstellungen.&lt;br /&gt;
* In der normalen Ansicht wird der Baustein durch den aktuellen Wert ersetzt.&lt;br /&gt;
&lt;br /&gt;
=== Platzhalterbeispiele ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Garten:temperature|round(1)|suffix( °C)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{Fenster:state|map(open=Offen,closed=Geschlossen)|default(unbekannt)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für eine Energieinformationsseite beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{virtualSolar:pv_total_power|suffix( W)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{virtualSolar:EnergyTotal|round(2)|suffix( kWh)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Device- und Readingnamen sind Beispiele. Wähle deine tatsächlichen Quellen. Filter werden von links nach rechts angewendet:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Filter !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;round(n)&amp;lt;/code&amp;gt; || Auf 0 bis 6 Nachkommastellen runden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; || Nachkommastellen abschneiden.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;upper&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lower&amp;lt;/code&amp;gt; || Groß-/Kleinschreibung.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;default(Text)&amp;lt;/code&amp;gt; || Ersatztext bei leerem Wert.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;prefix(Text)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;suffix(Text)&amp;lt;/code&amp;gt; || Text oder Einheit ergänzen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;map(on=An,off=Aus)&amp;lt;/code&amp;gt; || Readingwerte auf eigene Texte abbilden.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Sonderwerte &amp;lt;code&amp;gt;@alias&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;@name&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;@type&amp;lt;/code&amp;gt; liefern Geräteinformationen. Je Inhaltswidget sind höchstens 20 verschiedene Devices vorgesehen.&lt;br /&gt;
&lt;br /&gt;
=== Freies HTML ===&lt;br /&gt;
&lt;br /&gt;
Freies HTML unterstützt Platzhalter und alternativ Elemente mit &amp;lt;code&amp;gt;device&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;reading&amp;lt;/code&amp;gt;-Attributen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;h3&amp;gt;Garten&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Temperatur: {{Garten:temperature|round(1)|suffix( °C)}}&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;span device=&amp;quot;Garten&amp;quot; reading=&amp;quot;humidity&amp;quot; filter=&amp;quot;int|suffix( %)&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Erlaubtes HTML wird geprüft und bereinigt. Skripte, Iframes, Ereignisattribute und beliebige externe Inhalte sind nicht vorgesehen. Für Bilder und Links verwendest du das Textwidget oder LinkWidget.&lt;br /&gt;
&lt;br /&gt;
== Assetmanager: gemeinsame Bilder und Dokumente ==&lt;br /&gt;
&lt;br /&gt;
Über &amp;#039;&amp;#039;&amp;#039;Datei → Assetmanager&amp;#039;&amp;#039;&amp;#039; verwaltest du Dateien unabhängig vom gerade bearbeiteten Widget. Textwidget und LinkWidget verwenden denselben Katalog des CMS-Devices.&lt;br /&gt;
&lt;br /&gt;
=== Ordner und Upload ===&lt;br /&gt;
&lt;br /&gt;
* Die große Übersicht zeigt direkte Unterordner und Dateien des geöffneten Ordners.&lt;br /&gt;
* Ein Klick auf eine Ordnerkachel öffnet den Ordner; über den Pfad navigierst du zurück.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ordner erstellen&amp;#039;&amp;#039;&amp;#039; legt einen Unterordner am aktuellen Ort an.&lt;br /&gt;
* Mehrfachauswahl und Drag-and-drop laden Dateien direkt in den geöffneten Ordner.&lt;br /&gt;
* Ganze Ordner werden nicht per Drop importiert.&lt;br /&gt;
* Identische Dateien können wiederverwendet werden und bleiben dann gegebenenfalls in ihrem bisherigen Ordner.&lt;br /&gt;
* Eine Assetsuche ist in Version 1.6.1 noch nicht enthalten.&lt;br /&gt;
&lt;br /&gt;
=== Dateidetails und Aktionen ===&lt;br /&gt;
&lt;br /&gt;
Wähle eine Datei, um ihre Eigenschaften rechts zu öffnen:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Umbenennen&amp;#039;&amp;#039;&amp;#039; ändert den Anzeigenamen; die Dateiendung bleibt geschützt.&lt;br /&gt;
* Die physischen Dateien behalten ihre Hash-Dateinamen; bestehende Verweise bleiben erhalten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Verschieben&amp;#039;&amp;#039;&amp;#039; öffnet die grafische Zielordnerauswahl. &amp;#039;&amp;#039;&amp;#039;Diesen Ordner verwenden&amp;#039;&amp;#039;&amp;#039; führt die Aktion sofort aus.&lt;br /&gt;
* Ein Klick auf die Bildvorschau öffnet das Original in voller Größe.&lt;br /&gt;
* Bei vorhandenen EXIF-Daten öffnet das &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; ein Informationsfenster.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Verwendungen anzeigen&amp;#039;&amp;#039;&amp;#039; nennt Fundstellen in gespeicherten Live- und Entwurfsseiten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Löschen&amp;#039;&amp;#039;&amp;#039; erfordert eine Bestätigung und ist bei vorhandenen Verwendungen gesperrt.&lt;br /&gt;
* Ordner lassen sich nur löschen, wenn sie leer sind.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assetaktionen gelten sofort.&amp;#039;&amp;#039;&amp;#039; Abbrechen eines Widgetdialogs oder Verwerfen des Seitenentwurfs macht Uploads, Umbenennungen oder Löschungen nicht rückgängig. „Bild entfernen“ im Widget entfernt dagegen nur den Verweis, nicht die Datei.&lt;br /&gt;
&lt;br /&gt;
Die Verwendungsprüfung umfasst nicht beliebige externe Links, ungespeicherte Dialoge oder ältere Konfigurationsbackups.&lt;br /&gt;
&lt;br /&gt;
=== Formate, Grenzen und Datenschutz ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Bereich !! Standard&lt;br /&gt;
|-&lt;br /&gt;
| Bilder || PNG, JPEG, GIF; bis 3 MiB je Datei.&lt;br /&gt;
|-&lt;br /&gt;
| Dokumente || Unter anderem PDF, Office-Dateien, ODT/ODS/ODP, TXT und CSV; bis 20 MiB je Datei.&lt;br /&gt;
|-&lt;br /&gt;
| Gesamtspeicher || 500 MiB je CMS-Device.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Administration erlaubt Anpassungen. Technische Obergrenzen sind 50 MiB je Datei, 2048 MiB Gesamtspeicher, 2000 Assets, 200 Ordner und 10 Ordnerebenen. Aktive Web-/Skriptformate bleiben gesperrt.&lt;br /&gt;
&lt;br /&gt;
Dokumente werden als Download angeboten; es gibt keine Office-Vorschau und keinen Virenscanner. EXIF-Daten werden lokal im Browser gelesen, aber nicht aus dem Original entfernt. Entferne sensible Kamera-/GPS-Daten vor dem Upload selbst.&lt;br /&gt;
&lt;br /&gt;
Siehe [https://github.com/stapetz/fhem-cms/wiki/Assetmanager Assetmanager-Anleitung mit Screenshots].&lt;br /&gt;
&lt;br /&gt;
== Historische Diagramme ==&lt;br /&gt;
&lt;br /&gt;
Das Diagrammwidget zeichnet nicht selbst auf. Das Reading muss numerisch sein und bereits in DbLog oder FileLog aufgezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
Bei automatischer Quellenauswahl hat eine passende DbLog-Quelle Vorrang vor FileLog. Bei mehreren Quellen kannst du am CMS-Device gezielt zuordnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr CMS historySource dblog&lt;br /&gt;
attr CMS dbLog MeinDbLog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr CMS historySource filelog&lt;br /&gt;
attr CMS fileLog MeinFileLog&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die genannten Logdevices müssen existieren und korrekt eingerichtet sein. Die Befehle legen keine Datenbank oder Logdatei an.&lt;br /&gt;
&lt;br /&gt;
* Zeiträume: 24 Stunden, 7 Tage, 30 Tage oder 365 Tage.&lt;br /&gt;
* Granularität: automatisch, Rohdaten, 15 Minuten, 1 Stunde oder 1 Tag.&lt;br /&gt;
* Höchstens 400 dargestellte Punkte; größere Mengen werden mit Mittelwert und Min-/Max-Band zusammengefasst.&lt;br /&gt;
* Aktualisierung alle fünf Minuten; Abfragecache 30 Sekunden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DbLog-Abfragen sind synchron und können FHEM blockieren.&amp;#039;&amp;#039;&amp;#039; Beginne mit kurzen Zeiträumen und öffne nicht unnötig viele große Jahresdiagramme gleichzeitig.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
Für den produktiven Einsatz verwendest du die stabile Quelle &amp;#039;&amp;#039;&amp;#039;main&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
update all https://raw.githubusercontent.com/stapetz/fhem-cms/main/controls_fhem-cms.txt&lt;br /&gt;
shutdown restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfe anschließend Updateprotokoll und Internal &amp;#039;&amp;#039;&amp;#039;VERSION&amp;#039;&amp;#039;&amp;#039; und lade den Browser vollständig neu.&lt;br /&gt;
&lt;br /&gt;
Bei ausschließlich geänderten Frontenddateien genügt nach entsprechender Releaseanweisung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set CMS rebuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das erneuert die generierte Startseite und die Frontend-Versionsparameter. Es löscht keine Seiten oder Entwürfe. Nach Änderungen des Perl-Moduls oder seiner Helfer ist ein FHEM-Neustart erforderlich.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;dev&amp;#039;&amp;#039;&amp;#039; ist für bewusst durchgeführte Tests vorgesehen. Ein Wechsel zwischen Entwicklungs- und stabilem Stand ist kein garantierter Daten-Rollback. Installiere nicht versehentlich beide Updatequellen parallel für dieselben Dateien.&lt;br /&gt;
&lt;br /&gt;
== Sicherungen und ältere Installationen ==&lt;br /&gt;
&lt;br /&gt;
Eine vollständige Sicherung umfasst FHEM-Konfiguration, CMS-Live-Stand, Entwurf, Konfigurationsbackups, Bilder, Dokumente sowie zusammenpassende Modul- und Frontenddateien.&lt;br /&gt;
&lt;br /&gt;
Automatische CMS-Konfigurationsbackups enthalten &amp;#039;&amp;#039;&amp;#039;keine Assetdateien&amp;#039;&amp;#039;&amp;#039;. Die Wiederherstellung eines älteren Seitenstands holt gelöschte Bilder nicht zurück.&lt;br /&gt;
&lt;br /&gt;
Unter &amp;#039;&amp;#039;&amp;#039;Datei → Sicherungen / Wiederherstellung&amp;#039;&amp;#039;&amp;#039; prüfst du ein Backup und kannst es nach Bestätigung der externen Sicherung wiederherstellen. Ein vorhandener Entwurf muss vorher bewusst veröffentlicht oder verworfen werden. Die Wiederherstellung ersetzt den &amp;#039;&amp;#039;&amp;#039;Live-Stand&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Alte Layouts auf Schema 5 umstellen ===&lt;br /&gt;
&lt;br /&gt;
Neue Devices beginnen bereits mit Schema 5 und 12 Spalten. Bei älteren Installationen kann &amp;#039;&amp;#039;&amp;#039;Jetzt umstellen&amp;#039;&amp;#039;&amp;#039; erscheinen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorher vollständig sichern: Die Umstellung schreibt Daten und vergibt Positionen und Größen neu.&amp;#039;&amp;#039;&amp;#039; Widgets und Einstellungen bleiben erhalten; Live und ein vorhandener Entwurf werden getrennt umgestellt. Der Entwurf wird nicht automatisch veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
Alternativ zum Editorbutton:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set CMS layoutupgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es gibt dabei keine zusätzliche Bestätigung. Nach der Umstellung arbeitest du Positionen und Größen im Editor nach. Bei einem Fehler prüfst du Log, Sicherungen und Umstellungsjournal; überschreibe die Daten nicht durch manuelle JSON-Schreibversuche.&lt;br /&gt;
&lt;br /&gt;
== Wichtige Dateien und Diagnose ==&lt;br /&gt;
&lt;br /&gt;
Die Pfade beziehen sich auf das FHEM-Modulverzeichnis; &amp;lt;code&amp;gt;&amp;amp;lt;Device&amp;amp;gt;&amp;lt;/code&amp;gt; steht für deinen CMS-Device-Namen.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Pfad !! Inhalt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FHEM/01_FHEMCMS.pm&amp;lt;/code&amp;gt; || Modul.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FHEM/lib/FHEMCMS/Assets.pm&amp;lt;/code&amp;gt; || Serverseitige Assetverwaltung.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;www/fhem-cms/&amp;lt;/code&amp;gt; || Gemeinsames Frontend.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;www/fhem-cms/&amp;amp;lt;Device&amp;amp;gt;/index.html&amp;lt;/code&amp;gt; || Generierte Startseite; nicht manuell bearbeiten.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;www/fhem-cms/&amp;amp;lt;Device&amp;amp;gt;/media/&amp;lt;/code&amp;gt; || Bilder.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fhem-cms-data/&amp;amp;lt;Device&amp;amp;gt;/config.json&amp;lt;/code&amp;gt; || Live-Konfiguration.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fhem-cms-data/&amp;amp;lt;Device&amp;amp;gt;/draft.json&amp;lt;/code&amp;gt; || Vorhandener Entwurf.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fhem-cms-data/&amp;amp;lt;Device&amp;amp;gt;/assets.json&amp;lt;/code&amp;gt; || Assetkatalog.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;fhem-cms-data/&amp;amp;lt;Device&amp;amp;gt;/assets/&amp;lt;/code&amp;gt; || Private Dokumentdateien.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nützliche lesende FHEM-Befehle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
get CMS url&lt;br /&gt;
get CMS status&lt;br /&gt;
get CMS backups&lt;br /&gt;
get CMS layoutformat&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Konfiguration, Katalog, generierte Startseite und Hash-Dateien nicht unabhängig voneinander bearbeiten. Fehlende Daten in einer bestehenden Installation nicht durch Löschen und erneutes Definieren „reparieren“; zuerst Sicherung und Rechte prüfen.&lt;br /&gt;
&lt;br /&gt;
== Häufige Fragen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Problem !! Prüfung / Abhilfe&lt;br /&gt;
|-&lt;br /&gt;
| Homepage zeigt alte Inhalte || Entwurf veröffentlichen und Homepage neu laden.&lt;br /&gt;
|-&lt;br /&gt;
| Nach Update erscheint altes Verhalten || Vollständige Controls-Quelle, Neustart bzw. rebuild und Browsercache prüfen.&lt;br /&gt;
|-&lt;br /&gt;
| Gedankenstrich statt Readingwert || Exakte Device-/Readingnamen, Kanalzuordnung und vorhandenen Wert prüfen.&lt;br /&gt;
|-&lt;br /&gt;
| „Veraltet seit …“ || Verbindung, FHEMWEB-Anmeldung und Rechte prüfen; ein alter Wert ist keine aktuelle Bestätigung.&lt;br /&gt;
|-&lt;br /&gt;
| Schalter reagiert im Editor nicht || Gewollt; zur Bedienung die normale Ansicht verwenden.&lt;br /&gt;
|-&lt;br /&gt;
| Gerät fehlt beim Schieberegler || Set-Liste muss einen Slider anbieten.&lt;br /&gt;
|-&lt;br /&gt;
| Diagrammreading fehlt || Aufzeichnung in DbLog/FileLog und bei FileLog die Regexp prüfen.&lt;br /&gt;
|-&lt;br /&gt;
| Einheit stimmt, Zahlenwert nicht || Reading-Skalierung prüfen; Einheitenbeschriftung rechnet nicht um.&lt;br /&gt;
|-&lt;br /&gt;
| Datei bleibt nach Abbrechen bestehen || Upload ist sofort wirksam und nicht Teil des Seitenentwurfs.&lt;br /&gt;
|-&lt;br /&gt;
| Datei lässt sich nicht löschen || Verwendungen in Live und Entwurf prüfen und zunächst entfernen.&lt;br /&gt;
|-&lt;br /&gt;
| Speicherzustand unklar oder Konflikt || Aktuellen Stand neu laden, nicht mehrfach blind speichern.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Weiterführende Dokumentation und Support ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms Projekt und Quellcode]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/wiki Vollständiges Anwenderhandbuch]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/wiki/Widgets Widgetübersicht mit Screenshots und Einstellungsdialogen]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/wiki/Text-und-Bilder Textwidget am Solax-Beispiel]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/wiki/Assetmanager Assetmanager]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/wiki/Platzhalter-und-HTML Platzhalter und freies HTML]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/wiki/Sicherungen-und-Umstellung Sicherungen und Umstellung]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/releases Veröffentlichungen]&lt;br /&gt;
* [https://github.com/stapetz/fhem-cms/issues Fehlerberichte und Weiterentwicklungen]&lt;br /&gt;
&lt;br /&gt;
Nenne bei Fehlerberichten Version, Browser, Ansichtsmodus, erwartetes und tatsächliches Verhalten sowie reproduzierbare Schritte. Bei Layoutproblemen helfen Fensterbreite und Zoomfaktor. Entferne Zugangsdaten und private Informationen aus Logs und Screenshots.&lt;/div&gt;</summary>
		<author><name>Stefan.apetz</name></author>
	</entry>
</feed>