<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://banzhaf.chickenkiller.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joachim</id>
	<title>JoBaPedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://banzhaf.chickenkiller.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joachim"/>
	<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php/Special:Contributions/Joachim"/>
	<updated>2026-07-05T08:45:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16024</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16024"/>
		<updated>2026-06-21T14:28:32Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://build.opensuse.org/project/monitor/home:joba1:openscad|OpenSCAD OBS&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://job6:8844|TV Tipps&lt;br /&gt;
** http://job6:8766|AVL Müll Kalender&lt;br /&gt;
** http://job4:8077|Dancing Star&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://remote-rxv1600|RX-V1600&lt;br /&gt;
** http://job6:8099|Klima Status&lt;br /&gt;
** http://joba-modbus-1|Modbus Dashboard&lt;br /&gt;
** http://power3|Grid Power Monitor&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
** http://qnap:8080|Open WebUI&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16023</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16023"/>
		<updated>2026-06-15T18:20:17Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://build.opensuse.org/project/monitor/home:joba1:openscad|OpenSCAD OBS&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://job6:8844|TV Tipps&lt;br /&gt;
** http://job6:8766|AVL Müll Kalender&lt;br /&gt;
** http://job4:8077|Dancing Star&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://remote-rxv1600|RX-V1600&lt;br /&gt;
** http://joba-modbus-1|Modbus Dashboard&lt;br /&gt;
** http://power3|Grid Power Monitor&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
** http://qnap:8080|Open WebUI&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16022</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16022"/>
		<updated>2026-05-01T20:02:38Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://build.opensuse.org/project/monitor/home:joba1:openscad|OpenSCAD OBS&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://remote-rxv1600|RX-V1600&lt;br /&gt;
** http://joba-modbus-1|Modbus Dashboard&lt;br /&gt;
** http://power3|Grid Power Monitor&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
** http://qnap:8080|Open WebUI&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16021</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16021"/>
		<updated>2026-04-17T23:02:14Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://build.opensuse.org/project/monitor/home:joba1:openscad|OpenSCAD OBS&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://remote-rxv1600|RX-V1600&lt;br /&gt;
** http://joba-modbus-1|Modbus Dashboard&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
** http://qnap:8080|Open WebUI&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16020</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16020"/>
		<updated>2026-03-17T21:35:54Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://remote-rxv1600|RX-V1600&lt;br /&gt;
** http://joba-modbus-1|Modbus Dashboard&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
** http://qnap:8080|Open WebUI&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Youtube2Audio&amp;diff=16019</id>
		<title>Youtube2Audio</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Youtube2Audio&amp;diff=16019"/>
		<updated>2026-03-07T00:32:50Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Youtube to Audio =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/joba-1/ydl&lt;br /&gt;
&lt;br /&gt;
== DONT BOTHER ABOUT OLD STUFF BELOW == &lt;br /&gt;
&lt;br /&gt;
== yt-dlp ==&lt;br /&gt;
&lt;br /&gt;
Faster (as of 2022-04-22) alternative fork on https://github.com/yt-dlp/yt-dlp&lt;br /&gt;
&lt;br /&gt;
 VID=&#039;PGCTQTZXGXs&#039;&lt;br /&gt;
 conda create -n yt-dlp yt-dlp&lt;br /&gt;
 conda activate yt-dlp&lt;br /&gt;
 python3 -m pip install -U yt-dlp&lt;br /&gt;
 # or pip install --upgrade yt-dlp&lt;br /&gt;
 # or yt-dlp -U&lt;br /&gt;
 yt-dlp --extract-audio --keep-video &amp;quot;https://www.youtube.com/watch?v=$VID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Download youtube-dl or update to latest ==&lt;br /&gt;
&lt;br /&gt;
 sudo youtube-dl -U&lt;br /&gt;
&lt;br /&gt;
== Commands for DL a playlist ==&lt;br /&gt;
&lt;br /&gt;
 mkdir -p artist/album&lt;br /&gt;
 cd artist/album&lt;br /&gt;
 youtube-dl --extract-audio --keep-video &#039;album-playlist-url&#039;&lt;br /&gt;
&lt;br /&gt;
Option --embed-thumbnail seems useful, but did not work. Maybe retry later...&lt;br /&gt;
&lt;br /&gt;
== Commands for adding metadata ==&lt;br /&gt;
&lt;br /&gt;
will need adapting to actual yt title audio formats. This playlist only contained video with opus (ogg vorbis) audio tracks.&lt;br /&gt;
&lt;br /&gt;
 mkdir meta&lt;br /&gt;
 find . -name &#039;*.opus&#039; -print | while read f; do&lt;br /&gt;
   t=${f%-???????????.opus}&lt;br /&gt;
   t=${t/Roger Waters - /}&lt;br /&gt;
   t=${t#*/}&lt;br /&gt;
   a=${t%/*}&lt;br /&gt;
   t=${t#*/}&lt;br /&gt;
   echo &amp;quot;&amp;lt;$a&amp;gt;&amp;lt;$t&amp;gt;&amp;quot;&lt;br /&gt;
   mkdir -p &amp;quot;meta/$a&amp;quot;&lt;br /&gt;
   ffmpeg -v 0 -i &amp;quot;$f&amp;quot; -acodec copy -metadata title=&amp;quot;$t&amp;quot; -metadata artist=&amp;quot;Roger Waters&amp;quot; -metadata album=&amp;quot;$a&amp;quot; &amp;quot;meta/$a/$t.opus&amp;quot; &amp;lt;/dev/zero&lt;br /&gt;
   ffmpeg -v 0 -i &amp;quot;$f&amp;quot; -acodec mp3  -metadata title=&amp;quot;$t&amp;quot; -metadata artist=&amp;quot;Roger Waters&amp;quot; -metadata album=&amp;quot;$a&amp;quot; &amp;quot;meta/$a/$t.mp3&amp;quot; &amp;lt;/dev/zero&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
The redirects are necessary because ffmpeg encoders seem to read from stdin and garble the &amp;quot;while read f&amp;quot; loop input&lt;br /&gt;
&lt;br /&gt;
== Check id3v2 tags ==&lt;br /&gt;
&lt;br /&gt;
 id3v2 - Stevie\ Wonder\ and\ Jeff\ Beck\ -\ Superstition\ \(live\).mp3&lt;br /&gt;
&lt;br /&gt;
== Use id3v2 if above didn&#039;t work ==&lt;br /&gt;
&lt;br /&gt;
 id3v2 \&lt;br /&gt;
   --artist &amp;quot;Stevie Wonder and Jeff Beck&amp;quot; \&lt;br /&gt;
   --album &amp;quot;Rock and Roll Hall of Fame 25th Anniversary&amp;quot; \&lt;br /&gt;
   --song &amp;quot;Superstition&amp;quot; \&lt;br /&gt;
   --comment &amp;quot;https://www.youtube.com/watch?v=_zz1RzTDzoE&amp;quot; \&lt;br /&gt;
   Stevie\ Wonder\ and\ Jeff\ Beck\ -\ Superstition\ \(live\).mp3&lt;br /&gt;
&lt;br /&gt;
== Add pictures as mp3 tag ==&lt;br /&gt;
&lt;br /&gt;
 for f in *.mp3; do &lt;br /&gt;
   b=${f/.mp3/}; &lt;br /&gt;
   echo $b; &lt;br /&gt;
   id3v2 --APIC `cat &amp;quot;../$b.jpg&amp;quot;` &amp;quot;$f&amp;quot;; &lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Download Youtube Songs of an interpret as MP3 with ID3 Tags from a list ==&lt;br /&gt;
&lt;br /&gt;
List (songs.txt) in otherwise empty current directory looks like this:&lt;br /&gt;
 Album - Title: youtube link&lt;br /&gt;
&lt;br /&gt;
Command to download all songs in the list:&lt;br /&gt;
 conda activate yt-dlp&lt;br /&gt;
 python3 -m pip install -U yt-dlp&lt;br /&gt;
 i=&amp;quot;your interpret name&amp;quot;&lt;br /&gt;
 cat songs.txt | fgrep : | sed &#039;s/[^:]*: //&#039; | while read u; do &lt;br /&gt;
   echo $u; &lt;br /&gt;
   yt-dlp --extract-audio --keep-video &amp;quot;$u&amp;quot;; &lt;br /&gt;
 done&lt;br /&gt;
 for f in *.opus; do &lt;br /&gt;
   v=${f##*[}; v=${v%*]*}; &lt;br /&gt;
   l=`fgrep -- &amp;quot;$v&amp;quot; songs.txt`; &lt;br /&gt;
   a=${l% - *}; &lt;br /&gt;
   t=${l##* - }; t=${t%%:*}; &lt;br /&gt;
   echo &amp;quot;$a - $t&amp;quot;; &lt;br /&gt;
   mkdir -p &amp;quot;$i/$a&amp;quot;;&lt;br /&gt;
   ffmpeg -v 0 -i &amp;quot;$f&amp;quot; -acodec mp3 &amp;quot;$i/$a/$i - $t.mp3&amp;quot; &amp;lt;/dev/null; &lt;br /&gt;
   id3v2 --album &amp;quot;$a&amp;quot; --artist &amp;quot;$i&amp;quot; --song &amp;quot;$t&amp;quot; --comment &amp;quot;youtu.be/watch?v=$v&amp;quot; &amp;quot;$i/$a/$i - $t.mp3&amp;quot;;&lt;br /&gt;
 done&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16018</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16018"/>
		<updated>2026-01-26T15:28:54Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
** http://qnap:8080|Open WebUI&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16017</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16017"/>
		<updated>2025-12-01T20:39:05Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/em/0/overview|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16016</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16016"/>
		<updated>2025-11-28T20:22:37Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shellypro3em/#/|Shelly Pro 3EM&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16015</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16015"/>
		<updated>2025-11-19T16:54:48Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** https://banzhaf.chickenkiller.com/motorstorm|My NEW Motorstorm Leaderboards&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16014</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16014"/>
		<updated>2025-10-19T14:59:07Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://joban123.pcriot.com|My Motorstorm Leaderboards&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16013</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16013"/>
		<updated>2025-10-12T18:34:55Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Todo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render,video  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data --use-cuda&lt;br /&gt;
&lt;br /&gt;
= Docker Containers for Wyoming with ROCm =&lt;br /&gt;
&lt;br /&gt;
AMD supports only a few distros like SLES, freely available is only Ubuntu.&lt;br /&gt;
So I stop using tumbleweed and try to use an AMD docker image for onnxruntime&lt;br /&gt;
&lt;br /&gt;
* prepare docker environment&lt;br /&gt;
 sudo zypper in docker&lt;br /&gt;
 sudo mv /var/lib/docker /data&lt;br /&gt;
 sudo ln -s /data/docker /var/lib/docker&lt;br /&gt;
 sudo sytemctl enable docker&lt;br /&gt;
 sudo systemctl start docker&lt;br /&gt;
 sudo usermod -aG docker $USER  # restart session&lt;br /&gt;
&lt;br /&gt;
* prepare and run wyoming image with ROCm and persistence in /var/lib/docker/volumes/whisper-data/_data/&lt;br /&gt;
 docker pull rocm/onnxruntime:rocm7.0_ub24.04_ort1.22_torch2.8.0&lt;br /&gt;
 docker run -it -p 10300:10300 -v whisper-data:/data rocm/onnxruntime:rocm7.0_ub24.04_ort1.22_torch2.8.0&lt;br /&gt;
 &lt;br /&gt;
* prepare container for wyoming&lt;br /&gt;
 rocminfo  # check if GPU is visible inside the container&lt;br /&gt;
 cd /data&lt;br /&gt;
 mkdir cache data download&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install apt-utils&lt;br /&gt;
 apt-get install git&lt;br /&gt;
 apt-get install vim&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=/data/cache script/run --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir /data/data --download-dir /data/download --device cuda&lt;br /&gt;
&lt;br /&gt;
RuntimeError: CUDA failed with error CUDA driver version is insufficient for CUDA runtime version&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
&lt;br /&gt;
For now, I tried to use --device cuda with whisper and failed.&lt;br /&gt;
It creates an own .venv, but installing torch there with above pip does not help&lt;br /&gt;
&lt;br /&gt;
with docker approach:&lt;br /&gt;
whisper at start: RuntimeError: CUDA failed with error no CUDA-capable device is detected&lt;br /&gt;
&lt;br /&gt;
zypper info rocm: Version            : 6.4.3-2.2&lt;br /&gt;
&lt;br /&gt;
Found out whisper uses onnxruntime. There are AMD provided docker images with that runtime but ist still didn&#039;t work.&lt;br /&gt;
Now the error is CUDA version mismatch between driver and runtime. Tried several combinations. No luck.&lt;br /&gt;
Switching to Nvidia... :(&lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16012</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16012"/>
		<updated>2025-10-08T17:02:07Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Todo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render,video  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data --use-cuda&lt;br /&gt;
&lt;br /&gt;
= Docker Containers for Wyoming with ROCm =&lt;br /&gt;
&lt;br /&gt;
AMD supports only a few distros like SLES, freely available is only Ubuntu.&lt;br /&gt;
So I stop using tumbleweed and try to use an AMD docker image for onnxruntime&lt;br /&gt;
&lt;br /&gt;
* prepare docker environment&lt;br /&gt;
 sudo zypper in docker&lt;br /&gt;
 sudo mv /var/lib/docker /data&lt;br /&gt;
 sudo ln -s /data/docker /var/lib/docker&lt;br /&gt;
 sudo sytemctl enable docker&lt;br /&gt;
 sudo systemctl start docker&lt;br /&gt;
 sudo usermod -aG docker $USER  # restart session&lt;br /&gt;
&lt;br /&gt;
* prepare and run wyoming image with ROCm and persistence in /var/lib/docker/volumes/whisper-data/_data/&lt;br /&gt;
 docker pull rocm/onnxruntime:rocm7.0_ub24.04_ort1.22_torch2.8.0&lt;br /&gt;
 docker run -it -p 10300:10300 -v whisper-data:/data rocm/onnxruntime:rocm7.0_ub24.04_ort1.22_torch2.8.0&lt;br /&gt;
 &lt;br /&gt;
* prepare container for wyoming&lt;br /&gt;
 rocminfo  # check if GPU is visible inside the container&lt;br /&gt;
 cd /data&lt;br /&gt;
 mkdir cache data download&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install apt-utils&lt;br /&gt;
 apt-get install git&lt;br /&gt;
 apt-get install vim&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=/data/cache script/run --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir /data/data --download-dir /data/download --device cuda&lt;br /&gt;
&lt;br /&gt;
RuntimeError: CUDA failed with error CUDA driver version is insufficient for CUDA runtime version&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
&lt;br /&gt;
For now, I tried to use --device cuda with whisper and failed.&lt;br /&gt;
It creates an own .venv, but installing torch there with above pip does not help&lt;br /&gt;
&lt;br /&gt;
with docker approach:&lt;br /&gt;
whisper at start: RuntimeError: CUDA failed with error no CUDA-capable device is detected&lt;br /&gt;
&lt;br /&gt;
zypper info rocm: Version            : 6.4.3-2.2&lt;br /&gt;
&lt;br /&gt;
probably need to adapt image to downgrade from rocm7 to rocm6.4.3&lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16011</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16011"/>
		<updated>2025-10-08T16:58:36Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Wyoming Piper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render,video  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data --use-cuda&lt;br /&gt;
&lt;br /&gt;
= Docker Containers for Wyoming with ROCm =&lt;br /&gt;
&lt;br /&gt;
AMD supports only a few distros like SLES, freely available is only Ubuntu.&lt;br /&gt;
So I stop using tumbleweed and try to use an AMD docker image for onnxruntime&lt;br /&gt;
&lt;br /&gt;
* prepare docker environment&lt;br /&gt;
 sudo zypper in docker&lt;br /&gt;
 sudo mv /var/lib/docker /data&lt;br /&gt;
 sudo ln -s /data/docker /var/lib/docker&lt;br /&gt;
 sudo sytemctl enable docker&lt;br /&gt;
 sudo systemctl start docker&lt;br /&gt;
 sudo usermod -aG docker $USER  # restart session&lt;br /&gt;
&lt;br /&gt;
* prepare and run wyoming image with ROCm and persistence in /var/lib/docker/volumes/whisper-data/_data/&lt;br /&gt;
 docker pull rocm/onnxruntime:rocm7.0_ub24.04_ort1.22_torch2.8.0&lt;br /&gt;
 docker run -it -p 10300:10300 -v whisper-data:/data rocm/onnxruntime:rocm7.0_ub24.04_ort1.22_torch2.8.0&lt;br /&gt;
 &lt;br /&gt;
* prepare container for wyoming&lt;br /&gt;
 rocminfo  # check if GPU is visible inside the container&lt;br /&gt;
 cd /data&lt;br /&gt;
 mkdir cache data download&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install apt-utils&lt;br /&gt;
 apt-get install git&lt;br /&gt;
 apt-get install vim&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=/data/cache script/run --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir /data/data --download-dir /data/download --device cuda&lt;br /&gt;
&lt;br /&gt;
RuntimeError: CUDA failed with error CUDA driver version is insufficient for CUDA runtime version&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
&lt;br /&gt;
For now, I tried to use --device cuda with whisper and failed.&lt;br /&gt;
It creates an own .venv, but installing torch there with above pip does not help&lt;br /&gt;
&lt;br /&gt;
whisper at start: RuntimeError: CUDA failed with error no CUDA-capable device is detected&lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16010</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16010"/>
		<updated>2025-10-08T02:23:17Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Install rocm meta package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render,video  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data --use-cuda&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
&lt;br /&gt;
For now, I tried to use --device cuda with whisper and failed.&lt;br /&gt;
It creates an own .venv, but installing torch there with above pip does not help&lt;br /&gt;
&lt;br /&gt;
whisper at start: RuntimeError: CUDA failed with error no CUDA-capable device is detected&lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16009</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16009"/>
		<updated>2025-10-08T02:00:56Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Wyoming Piper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data --use-cuda&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
&lt;br /&gt;
For now, I tried to use --device cuda with whisper and failed.&lt;br /&gt;
It creates an own .venv, but installing torch there with above pip does not help&lt;br /&gt;
&lt;br /&gt;
whisper at start: RuntimeError: CUDA failed with error no CUDA-capable device is detected&lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16008</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16008"/>
		<updated>2025-10-08T02:00:19Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Todo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
&lt;br /&gt;
For now, I tried to use --device cuda with whisper and failed.&lt;br /&gt;
It creates an own .venv, but installing torch there with above pip does not help&lt;br /&gt;
&lt;br /&gt;
whisper at start: RuntimeError: CUDA failed with error no CUDA-capable device is detected&lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16007</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16007"/>
		<updated>2025-10-08T01:49:22Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* PyTorch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;br /&gt;
&lt;br /&gt;
= Wyoming Faster Whisper =&lt;br /&gt;
&lt;br /&gt;
running a server for Home Assistant voice commands&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-faster-whisper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-faster-whisper.git&lt;br /&gt;
 cd wyoming-faster-whisper&lt;br /&gt;
 script/setup&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-faster-whisper-data script/run --device cpu --model large-v3 --language de --uri &#039;tcp://0.0.0.0:10300&#039; --data-dir ../wyoming-faster-whisper-data --download-dir ../wyoming-faster-whisper-data&lt;br /&gt;
&lt;br /&gt;
= Wyoming Piper =&lt;br /&gt;
&lt;br /&gt;
see https://github.com/rhasspy/wyoming-piper?tab=readme-ov-file#local-install&lt;br /&gt;
&lt;br /&gt;
 mkdir wyoming-piper-data&lt;br /&gt;
 git clone https://github.com/rhasspy/wyoming-piper.git&lt;br /&gt;
 cd wyoming-piper&lt;br /&gt;
 script/setup&lt;br /&gt;
 curl -L -s &amp;quot;https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_amd64.tar.gz&amp;quot; | tar -zxvf - -C ..&lt;br /&gt;
 HF_HUB_CACHE=../wyoming-piper-data PATH=&amp;quot;../piper:$PATH&amp;quot; script/run --voice de_DE-thorsten-high --uri &#039;tcp://0.0.0.0:10200&#039; --data-dir ../wyoming-piper-data --download-dir ../wyoming-piper-data&lt;br /&gt;
&lt;br /&gt;
= Todo =&lt;br /&gt;
For now, I tried to use --device cuda (whisper) and --use-cuda (piper) and failed.&lt;br /&gt;
Both create their own .venv, but installing torch there with above pip does not help &lt;br /&gt;
&lt;br /&gt;
= Configure Home Assistant = &lt;br /&gt;
&lt;br /&gt;
Settings/Integrations/Wyoming Protocol: Add Service (host and port as used above, type is autodetected)&lt;br /&gt;
Settings/Voice Assistants: Add Assistant: some name, STT-&amp;gt;faster-whisper, TTS-&amp;gt;piper&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16006</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16006"/>
		<updated>2025-10-07T23:37:06Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* AMD GPU ROCm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
= Install rocm meta package = &lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render  # restart session&lt;br /&gt;
&lt;br /&gt;
= Test Installation =&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
= PyTorch = &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16005</id>
		<title>AMD GPU ROCm</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=AMD_GPU_ROCm&amp;diff=16005"/>
		<updated>2025-10-07T23:36:24Z</updated>

		<summary type="html">&lt;p&gt;Joachim: Created page with &amp;quot;= AMD GPU ROCm =  how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda  == Install rocm meta package   sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm  sudo zypper ref  sudo zypper in rocm  sudo usermod -aG render  # restart session  == Test Installation ==   clinfo -l  Should output something like this:   Platform #0: AMD Accelerated Parallel Processing...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AMD GPU ROCm =&lt;br /&gt;
&lt;br /&gt;
how to use amd grafic cards for speeding up calculations un tumbleweed similar tu nvidia with cuda&lt;br /&gt;
&lt;br /&gt;
== Install rocm meta package&lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar https://download.opensuse.org/repositories/science:/GPU:/ROCm:/Work/openSUSE_Tumbleweed/ science_GPU_ROCm&lt;br /&gt;
 sudo zypper ref&lt;br /&gt;
 sudo zypper in rocm&lt;br /&gt;
 sudo usermod -aG render  # restart session&lt;br /&gt;
&lt;br /&gt;
== Test Installation ==&lt;br /&gt;
&lt;br /&gt;
 clinfo -l&lt;br /&gt;
&lt;br /&gt;
Should output something like this:&lt;br /&gt;
&lt;br /&gt;
 Platform #0: AMD Accelerated Parallel Processing&lt;br /&gt;
  +-- Device #0: gfx1201&lt;br /&gt;
  `-- Device #1: gfx1036&lt;br /&gt;
&lt;br /&gt;
 rocminfo | grep gfx&lt;br /&gt;
&lt;br /&gt;
Should output something like&lt;br /&gt;
&lt;br /&gt;
  Name:                    gfx1201                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1201         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx12-generic   &lt;br /&gt;
  Name:                    gfx1036                            &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx1036         &lt;br /&gt;
      Name:                    amdgcn-amd-amdhsa--gfx10-3-generic&lt;br /&gt;
&lt;br /&gt;
== PyTorch == &lt;br /&gt;
&lt;br /&gt;
for python projects like wyoming using pytorch add rocm support to a virtual environment.&lt;br /&gt;
See https://pytorch.org/get-started/locally/ for the current final pip command&lt;br /&gt;
&lt;br /&gt;
 cd your/venv/basedirectory&lt;br /&gt;
 python3 -m venv wyoming&lt;br /&gt;
 . wyoming/bin/activate&lt;br /&gt;
 pip install --upgrade pip&lt;br /&gt;
 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.4&lt;br /&gt;
&lt;br /&gt;
Test with (should print True)&lt;br /&gt;
&lt;br /&gt;
 python -c &#039;import torch; print(torch.cuda.is_available())&#039;&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=HowTo&amp;diff=16004</id>
		<title>HowTo</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=HowTo&amp;diff=16004"/>
		<updated>2025-10-07T23:08:43Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[MediaWiki Upgrade]]&lt;br /&gt;
* [[RT61 WLAN for Caros Medion Notebook with openSuse 10.3]]&lt;br /&gt;
* [[Add new hg Repo]]&lt;br /&gt;
* [[Revise hg Repo]]&lt;br /&gt;
* [[Use GPG mail signing and encryption with openSuse 10.3]]&lt;br /&gt;
* [[Install Mediatomb on dm7020 and dm800 (old)]]&lt;br /&gt;
* [[Install PS3MediaServer on job4 and job6]]&lt;br /&gt;
* [[Install Nvidia driver with openSUSE 11.3 while there is no repo]]&lt;br /&gt;
* [[DB2 database with LDAP instanceowner and users]]&lt;br /&gt;
* [[ZoneMinder install]]&lt;br /&gt;
* [[Retrieve Motorstorm Apocalypse Profile Data]]&lt;br /&gt;
* [[Fix wrong colours with flash/youtube and linux nvidia driver]]&lt;br /&gt;
* [[Set Android Debugging Permissions]]&lt;br /&gt;
* [[Cleanup Wiki from Mass Spam]]&lt;br /&gt;
* [[Make Developer CraftBukkit]]&lt;br /&gt;
* [[Install OpenNMS on openSUSE 12.2]]&lt;br /&gt;
* [[DB2 autostart with systemd]]&lt;br /&gt;
* [[Install vmware Player]]&lt;br /&gt;
* [[Microsoft Windows Download Images]]&lt;br /&gt;
* [[Shrink Sparse Disk Files of Windows VM Images]]&lt;br /&gt;
* [[Grow Windows 8.1 VM NTFS volume]]&lt;br /&gt;
* [[Play On Linux]]&lt;br /&gt;
* [[Java Update (Oracle)]]&lt;br /&gt;
* [[Openwrt on wlan-825]]&lt;br /&gt;
* [[Eclipse aktualisieren]]&lt;br /&gt;
* [[Trac at job4]]&lt;br /&gt;
* [[DV Video to x264 Conversion]]&lt;br /&gt;
* [[Pulse Audio Volume Reset Fix]]&lt;br /&gt;
* [[Repair hanging video playback with Nvidia driver]]&lt;br /&gt;
* [[Extract Audio from Video Stream with ffmpeg]]&lt;br /&gt;
* [[Provide a private Diaspora Pod]]&lt;br /&gt;
* [[Nvidia native driver brightness control with Leap 42.1]]&lt;br /&gt;
* [[DB2 with python]]&lt;br /&gt;
* [[Convert LV to striped]]&lt;br /&gt;
* [[Install Mosquitto MQTT]]&lt;br /&gt;
* [[Install Wings3D]]&lt;br /&gt;
* [[Install PlatformIO for Arduino, ESP8266, ESP32 and STM32]]&lt;br /&gt;
* [[Suggest changes with a Github Pull Request]]&lt;br /&gt;
* [[X2Go]]&lt;br /&gt;
* [[ESP32 Remote Debugging]]&lt;br /&gt;
* [[Downsize 4k Videos]]&lt;br /&gt;
* [[STM32 Development and Remote Debugging]]&lt;br /&gt;
* [[Youtube2Audio]]&lt;br /&gt;
* [[Save Chrome Passwords]]&lt;br /&gt;
* [[Update Marlin Firmware of Anycubic Kossel Pulley]]&lt;br /&gt;
* [[Google Test]]&lt;br /&gt;
* [[Fritz Box External IP]]&lt;br /&gt;
* [[Hadoop in Docker]]&lt;br /&gt;
* [[Start Systemd Service After Device Appears]]&lt;br /&gt;
* [[Install DB2 ModPack 11.5.5.0 over 11.5.0.0]]&lt;br /&gt;
* [[Modify GCode to restart 3D Print]]&lt;br /&gt;
* [[Optical Flow with OpenCV]]&lt;br /&gt;
* [[Vu+ Bootlogos]]&lt;br /&gt;
* [[Kicad PCB]]&lt;br /&gt;
* [[Nvidia Driver on Opensuse Leap 15.3]]&lt;br /&gt;
* [[Pulseaudio SPDIF Input, LFE remix]]&lt;br /&gt;
* [[Serial Bridge over WLAN with an ESP-01]]&lt;br /&gt;
* [[JupyterHub]]&lt;br /&gt;
* [[Fix IPC for DB2 with Opensuse 15.3]]&lt;br /&gt;
* [[Reapply for Fusion360 Personal Use]]&lt;br /&gt;
* [[Sandisk Usb3 Nvme Disk with Linux]]&lt;br /&gt;
* [[Make kernel.org Rpm for Tumbleweed]]&lt;br /&gt;
* [[Build any python version for venv]]&lt;br /&gt;
* [[German Keyboard Setting for 104-Keyboard]]&lt;br /&gt;
* [[Stream Playlist to iOS VLC]]&lt;br /&gt;
* [[DB2 Container on QNAP NAS]]&lt;br /&gt;
* [[SolarPower]]&lt;br /&gt;
* [[Enigma2Events]]&lt;br /&gt;
* [[Nvidia Delayed Frame Bug]]&lt;br /&gt;
* [[Poster Druck]]&lt;br /&gt;
* [[GoPro Sync]]&lt;br /&gt;
* [[Design Patterns]]&lt;br /&gt;
* [[Arome Weather]]&lt;br /&gt;
* [[AMD GPU ROCm]]&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16003</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=16003"/>
		<updated>2025-09-07T14:23:00Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://127.0.0.1:631|Cups on job4 only&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=16002</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=16002"/>
		<updated>2025-08-24T09:58:33Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;siehe auch [http://job4:8000/wiki/TanzFiguren Trac Wiki Tanzfiguren]&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* 3 x Valentino&lt;br /&gt;
* Dame rechts wedeln&lt;br /&gt;
* Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* Linksdrehung&lt;br /&gt;
* Viererschritt, vor Dame rechts drehen&lt;br /&gt;
** links vor - rechts seit - zurück, zurück, zusammendrehen, Rechtsdrehung&lt;br /&gt;
* Öffnen, Hinterkreuzen, Dame rechts rum in Grundposition, schnelle Linksdrehung?&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus (opening out, fan)&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker (kick cross)&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=BukkitPlugins&amp;diff=16001</id>
		<title>BukkitPlugins</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=BukkitPlugins&amp;diff=16001"/>
		<updated>2025-06-02T10:27:39Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* dynmap */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Bukkit Plugins =&lt;br /&gt;
&lt;br /&gt;
Diese Plugins sind auf unseren Bukkit Servern installiert&lt;br /&gt;
&lt;br /&gt;
== CommandBook ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/commandbook/ BukkitDev CommandBook ]&lt;br /&gt;
&lt;br /&gt;
== CommandHelper ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/commandhelper/ BukkitDev CommandHelper ]&lt;br /&gt;
&lt;br /&gt;
== CraftBook ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/craftbook/ BukkitDev CraftBook ]&lt;br /&gt;
&lt;br /&gt;
* CraftBookCircuits&lt;br /&gt;
* CraftBookCommon&lt;br /&gt;
* CraftBookMechanisms&lt;br /&gt;
* CraftBookVehicles&lt;br /&gt;
&lt;br /&gt;
== dynmap ==&lt;br /&gt;
&lt;br /&gt;
note: &lt;br /&gt;
* for 1.21.4 dl snapshot https://dynmap.us/builds/dynmap/Dynmap-3.7-SNAPSHOT-spigot.jar&lt;br /&gt;
* for 1.19.3 just dl and use jar version 3.5 beta 1 from https://www.spigotmc.org/resources/dynmap%C2%AE.274/&lt;br /&gt;
&lt;br /&gt;
neu: [http://www.minecraftforum.net/topic/1543523-dynmap-dynamic-web-based-maps-for-minecraft Minecraft Forum Dynmap ]&lt;br /&gt;
&lt;br /&gt;
alt: [http://dev.bukkit.org/server-mods/dynmap/ BukkitDev Dynmap ]&lt;br /&gt;
&lt;br /&gt;
Zum selbst bauen (von https://github.com/webbukkit/dynmap/wiki/How-to-compile-Dynmap):&lt;br /&gt;
&lt;br /&gt;
=== First time ===&lt;br /&gt;
 &lt;br /&gt;
 cd /your/workspace&lt;br /&gt;
 git clone git://github.com/webbukkit/DynmapCoreAPI.git &amp;amp;&amp;amp; (cd DynmapCoreAPI &amp;amp;&amp;amp; mvn install)&lt;br /&gt;
 git clone git://github.com/webbukkit/DynmapCore.git &amp;amp;&amp;amp; (cd DynmapCore &amp;amp;&amp;amp; mvn install)&lt;br /&gt;
 git clone git://github.com/Bukkit/Bukkit.git &amp;amp;&amp;amp; (cd Bukkit &amp;amp;&amp;amp; mvn install)&lt;br /&gt;
 git clone git://github.com/webbukkit/dynmap-api.git &amp;amp;&amp;amp; (cd dynmap-api &amp;amp;&amp;amp; mvn install)&lt;br /&gt;
 git clone git://github.com/webbukkit/dynmap.git &amp;amp;&amp;amp; (cd dynmap &amp;amp;&amp;amp; mvn install)&lt;br /&gt;
&lt;br /&gt;
=== Next time ===&lt;br /&gt;
&lt;br /&gt;
 cd /your/workspace&lt;br /&gt;
 cd DynmapCoreAPI &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; mvn install&lt;br /&gt;
 cd ../DynmapCore &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; mvn install&lt;br /&gt;
 cd ../Bukkit &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; mvn install&lt;br /&gt;
 cd ../dynmap-api &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; mvn install&lt;br /&gt;
 cd ../dynmap &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; mvn install&lt;br /&gt;
&lt;br /&gt;
== LWC ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/lwc/ BukkitDev LWC ]&lt;br /&gt;
&lt;br /&gt;
Build bleeding edge development version&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/Hidendra/LWC.git&lt;br /&gt;
&lt;br /&gt;
== Simple-AutoSave ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/simple-autosave/ BukkitDev Simple-AutoSave]&lt;br /&gt;
&lt;br /&gt;
== SimpleBackup ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/simplebackup/ BukkitDev SimpleBackup ]&lt;br /&gt;
&lt;br /&gt;
== WorldEdit ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/worldedit/ BukkitDev WorldEdit ]&lt;br /&gt;
&lt;br /&gt;
Build bleeding edge development version&lt;br /&gt;
&lt;br /&gt;
 git clone git://github.com/sk89q/worldedit.git&lt;br /&gt;
&lt;br /&gt;
== WorldGuard ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/worldguard/ BukkitDev WorldGuard ]&lt;br /&gt;
&lt;br /&gt;
== Stats ==&lt;br /&gt;
&lt;br /&gt;
[http://dev.bukkit.org/server-mods/lolmewnstats/ BukkitDev Stats ]&lt;br /&gt;
&lt;br /&gt;
Stats uses a mysql database and a web browser.&lt;br /&gt;
I wrote install instructions here: &lt;br /&gt;
&lt;br /&gt;
https://bitbucket.org/Lolmewn/stats/wiki/Home&lt;br /&gt;
&lt;br /&gt;
SQL to create a user for a mysql database (needed for Stats plugin if an external database is used)&lt;br /&gt;
&lt;br /&gt;
 CREATE USER &#039;joachim&#039;@&#039;%&#039; IDENTIFIED BY &#039;***&#039;;&lt;br /&gt;
 GRANT USAGE ON * . * TO &#039;joachim&#039;@&#039;%&#039; IDENTIFIED BY &#039;***&#039; WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON `job1bukkit` . * TO &#039;joachim&#039;@&#039;%&#039;;&lt;br /&gt;
&lt;br /&gt;
== Build == &lt;br /&gt;
&lt;br /&gt;
Hier hab ich beschrieben wie ich den Bukkit Server selbst baue, wenn es nach Minecraft Updates keine Recommended Builds zum runterladen gibt.&lt;br /&gt;
&lt;br /&gt;
[[Make Developer CraftBukkit]]&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Projekt_Joachims_Minecraftserver&amp;diff=16000</id>
		<title>Projekt Joachims Minecraftserver</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Projekt_Joachims_Minecraftserver&amp;diff=16000"/>
		<updated>2025-06-02T10:25:20Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* mit Webserver (Test) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Joachims Minecraftserver =&lt;br /&gt;
&lt;br /&gt;
Some notes from 1.19.3 install:&lt;br /&gt;
* needs openjdk 17 (as documented online) not provided by opensuse leap 15.3&lt;br /&gt;
* installed openjdk 17 from https://build.opensuse.org/package/show/home%3Aecsos/java-17-openjdk (add repo, ignore errors, install)&lt;br /&gt;
* script /usr/local/spigot/new-spigot.sh (similar to below) run with sudo&lt;br /&gt;
* script got stuck somewhere in root shell (screen)&lt;br /&gt;
* sed eula manually, chown -R joachim run&lt;br /&gt;
* changed port in server properties (at 3 places) from *5 to *9&lt;br /&gt;
* removed a no longer supported java parameter (-XX:MaxPermSize=256M)&lt;br /&gt;
* start manually as service file would (not used start.sh) -&amp;gt; worked&lt;br /&gt;
* enabled/started service&lt;br /&gt;
&lt;br /&gt;
Neue Spigot Version? see also /usr/local/spigot/README.txt&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
SREV=1.16.3&lt;br /&gt;
PORT=25565&lt;br /&gt;
SDIR=&amp;quot;spigot-v$SREV&amp;quot;&lt;br /&gt;
BASEDIR=/usr/local/spigot&lt;br /&gt;
&lt;br /&gt;
mkdir -p &amp;quot;$BASEDIR/$SDIR&amp;quot;&lt;br /&gt;
cd &amp;quot;$BASEDIR/$SDIR&amp;quot;&lt;br /&gt;
wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar&lt;br /&gt;
java -Xms8G -Xmx8G -XX:+UseG1GC -jar BuildTools.jar --rev &amp;quot;$SREV&amp;quot;&lt;br /&gt;
# java -jar BuildTools.jar&lt;br /&gt;
mkdir run&lt;br /&gt;
screen -S spigot&lt;br /&gt;
cd run&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;start.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
java -Xms8G -Xmx8G -XX:+UseG1GC -jar spigot.jar&lt;br /&gt;
EOF&lt;br /&gt;
chmod +x start.sh&lt;br /&gt;
ln -sf ../craftbukkit-*.jar craftbukkit.jar&lt;br /&gt;
ln -sf ../spigot-*.jar spigot.jar&lt;br /&gt;
./start.sh&lt;br /&gt;
sed -i s/false/true/ eula.txt&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;server.properties&lt;br /&gt;
difficulty=3&lt;br /&gt;
snooper-enabled=false&lt;br /&gt;
server-port=$PORT&lt;br /&gt;
level-name=world&lt;br /&gt;
motd=Joba&#039;s Spigot $SREV Server&lt;br /&gt;
EOF&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/systemd/system/spigot-$SREV.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Spigot v$SREV Minecraft Server&lt;br /&gt;
RequiresMountsFor=$BASEDIR&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=joachim&lt;br /&gt;
ExecStart=/usr/bin/screen -d -m -L -S spigot-v$SREV java -Xms8G -Xmx8G -XX:+UseG1GC -jar spigot.jar&lt;br /&gt;
WorkingDirectory=$BASEDIR/$SDIR/run&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl start spigot-$SREV.service&lt;br /&gt;
sleep 1&lt;br /&gt;
systemctl status spigot-$SREV.service&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Live Map ==&lt;br /&gt;
&lt;br /&gt;
=== direkt ===&lt;br /&gt;
&lt;br /&gt;
* Von außerhalb (geht nicht wg ssl und port fwd) [[http://banzhaf.chickenkiller.com:8133/ Remote Livemap]]&lt;br /&gt;
* Bei mir zuhause [[http://job4:8123/ Lokale Livemap]]&lt;br /&gt;
&lt;br /&gt;
=== mit Webserver (Test) ===&lt;br /&gt;
&lt;br /&gt;
deactivated&lt;br /&gt;
&lt;br /&gt;
* Von außerhalb [[http://banzhaf.homeip.net/minecraft/livemap/ Remote Livemap]]&lt;br /&gt;
* Bei mir zuhause [[http://job4/minecraft/livemap/ Lokale Livemap]]&lt;br /&gt;
&lt;br /&gt;
== Hilfe ==&lt;br /&gt;
&lt;br /&gt;
[[Minecraft_Hilfe|Kommandoübersicht]]&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
[[BukkitPlugins|Bukkit Plugins]]&lt;br /&gt;
&lt;br /&gt;
== Infos ==&lt;br /&gt;
&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
hier werd ich Infos zum Server reinschreiben, wenn ich welche habe.&lt;br /&gt;
&lt;br /&gt;
Bis dahin: verwende /help :)&lt;br /&gt;
&lt;br /&gt;
Since some time only ms accounts work. migrated my joba1 mc beta account to j@google to joba17508 :-/ (works on job4)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Projekt_Joachims_Minecraftserver&amp;diff=15999</id>
		<title>Projekt Joachims Minecraftserver</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Projekt_Joachims_Minecraftserver&amp;diff=15999"/>
		<updated>2025-06-02T10:24:06Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* direkt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Joachims Minecraftserver =&lt;br /&gt;
&lt;br /&gt;
Some notes from 1.19.3 install:&lt;br /&gt;
* needs openjdk 17 (as documented online) not provided by opensuse leap 15.3&lt;br /&gt;
* installed openjdk 17 from https://build.opensuse.org/package/show/home%3Aecsos/java-17-openjdk (add repo, ignore errors, install)&lt;br /&gt;
* script /usr/local/spigot/new-spigot.sh (similar to below) run with sudo&lt;br /&gt;
* script got stuck somewhere in root shell (screen)&lt;br /&gt;
* sed eula manually, chown -R joachim run&lt;br /&gt;
* changed port in server properties (at 3 places) from *5 to *9&lt;br /&gt;
* removed a no longer supported java parameter (-XX:MaxPermSize=256M)&lt;br /&gt;
* start manually as service file would (not used start.sh) -&amp;gt; worked&lt;br /&gt;
* enabled/started service&lt;br /&gt;
&lt;br /&gt;
Neue Spigot Version? see also /usr/local/spigot/README.txt&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
SREV=1.16.3&lt;br /&gt;
PORT=25565&lt;br /&gt;
SDIR=&amp;quot;spigot-v$SREV&amp;quot;&lt;br /&gt;
BASEDIR=/usr/local/spigot&lt;br /&gt;
&lt;br /&gt;
mkdir -p &amp;quot;$BASEDIR/$SDIR&amp;quot;&lt;br /&gt;
cd &amp;quot;$BASEDIR/$SDIR&amp;quot;&lt;br /&gt;
wget -O BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar&lt;br /&gt;
java -Xms8G -Xmx8G -XX:+UseG1GC -jar BuildTools.jar --rev &amp;quot;$SREV&amp;quot;&lt;br /&gt;
# java -jar BuildTools.jar&lt;br /&gt;
mkdir run&lt;br /&gt;
screen -S spigot&lt;br /&gt;
cd run&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;start.sh&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
java -Xms8G -Xmx8G -XX:+UseG1GC -jar spigot.jar&lt;br /&gt;
EOF&lt;br /&gt;
chmod +x start.sh&lt;br /&gt;
ln -sf ../craftbukkit-*.jar craftbukkit.jar&lt;br /&gt;
ln -sf ../spigot-*.jar spigot.jar&lt;br /&gt;
./start.sh&lt;br /&gt;
sed -i s/false/true/ eula.txt&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;server.properties&lt;br /&gt;
difficulty=3&lt;br /&gt;
snooper-enabled=false&lt;br /&gt;
server-port=$PORT&lt;br /&gt;
level-name=world&lt;br /&gt;
motd=Joba&#039;s Spigot $SREV Server&lt;br /&gt;
EOF&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;/etc/systemd/system/spigot-$SREV.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Spigot v$SREV Minecraft Server&lt;br /&gt;
RequiresMountsFor=$BASEDIR&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=joachim&lt;br /&gt;
ExecStart=/usr/bin/screen -d -m -L -S spigot-v$SREV java -Xms8G -Xmx8G -XX:+UseG1GC -jar spigot.jar&lt;br /&gt;
WorkingDirectory=$BASEDIR/$SDIR/run&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl start spigot-$SREV.service&lt;br /&gt;
sleep 1&lt;br /&gt;
systemctl status spigot-$SREV.service&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Live Map ==&lt;br /&gt;
&lt;br /&gt;
=== direkt ===&lt;br /&gt;
&lt;br /&gt;
* Von außerhalb (geht nicht wg ssl und port fwd) [[http://banzhaf.chickenkiller.com:8133/ Remote Livemap]]&lt;br /&gt;
* Bei mir zuhause [[http://job4:8123/ Lokale Livemap]]&lt;br /&gt;
&lt;br /&gt;
=== mit Webserver (Test) ===&lt;br /&gt;
&lt;br /&gt;
* Von außerhalb [[http://banzhaf.homeip.net/minecraft/livemap/ Remote Livemap]]&lt;br /&gt;
* Bei mir zuhause [[http://job4/minecraft/livemap/ Lokale Livemap]]&lt;br /&gt;
&lt;br /&gt;
== Hilfe ==&lt;br /&gt;
&lt;br /&gt;
[[Minecraft_Hilfe|Kommandoübersicht]]&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
[[BukkitPlugins|Bukkit Plugins]]&lt;br /&gt;
&lt;br /&gt;
== Infos ==&lt;br /&gt;
&lt;br /&gt;
Hi,&lt;br /&gt;
&lt;br /&gt;
hier werd ich Infos zum Server reinschreiben, wenn ich welche habe.&lt;br /&gt;
&lt;br /&gt;
Bis dahin: verwende /help :)&lt;br /&gt;
&lt;br /&gt;
Since some time only ms accounts work. migrated my joba1 mc beta account to j@google to joba17508 :-/ (works on job4)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Main_Page&amp;diff=15998</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Main_Page&amp;diff=15998"/>
		<updated>2025-06-02T10:22:08Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* External */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= MediaWiki für Notizen von Joachim Banzhaf =&lt;br /&gt;
&lt;br /&gt;
* [[ToDo]]&lt;br /&gt;
* [[HowTo]]&lt;br /&gt;
&lt;br /&gt;
== GPL Projekte ==&lt;br /&gt;
* [[Projekt infosat2vdr]]&lt;br /&gt;
* [[Projekt diskmon]]&lt;br /&gt;
* [[Projekt PMS3 rpm]]&lt;br /&gt;
* [[Projekt msprsig]]&lt;br /&gt;
* [[Projekt And4Lunch]]&lt;br /&gt;
* [[Projekt IoT]]&lt;br /&gt;
&lt;br /&gt;
== private Projekte ==&lt;br /&gt;
* [[Projekt Lis.Tec Cluster]]&lt;br /&gt;
* [[Projekt KVM Cluster]]&lt;br /&gt;
* [[Projekt HDTV]]&lt;br /&gt;
* [[Projekt openSuse11.0@job4]]&lt;br /&gt;
* [[Projekt trac@job2]]&lt;br /&gt;
* [[Projekt Appointmentmatcher]]&lt;br /&gt;
* [[Projekt mspr@job1]]&lt;br /&gt;
* [[Projekt Qnap]]&lt;br /&gt;
* [[Projekt Joachims Minecraftserver]]&lt;br /&gt;
* [[Projekt Caros Gruppenblog]]&lt;br /&gt;
* [[Projekt PKI]]&lt;br /&gt;
* [[Projekt SSO]]&lt;br /&gt;
* [[Projekt Dynamic DNS]]&lt;br /&gt;
* [[Projekt Windows 8 Aktivierung]]&lt;br /&gt;
* [[Projekt Windows 8.1 ISO]]&lt;br /&gt;
* [[Projekt HTC Desire HD Splash und Boot Animation]]&lt;br /&gt;
* [[Project Worklight]]&lt;br /&gt;
* [[Project Raspberry PI]]&lt;br /&gt;
* [[Project Cyanogenmod for HTC Desire HD]]&lt;br /&gt;
* [[Tanzen]]&lt;br /&gt;
* [[Project JEspOs]]&lt;br /&gt;
* [[Project LetsEncrypt]]&lt;br /&gt;
* [[Project Easybox]]&lt;br /&gt;
* [[Project Samsung S7 LineageOS]]&lt;br /&gt;
* [[Project Drohnen]]&lt;br /&gt;
* [[Project Kyocera M5526]]&lt;br /&gt;
* [[Project TTN Daten in InfluxDB für Grafana]]&lt;br /&gt;
* [[Project Guitar and Linux]]&lt;br /&gt;
* [[Project Feinstaub]]&lt;br /&gt;
* [[Project Tumbleweed]]&lt;br /&gt;
&lt;br /&gt;
== Julians Seiten ==&lt;br /&gt;
* [[Projekt Papierblüte]]&lt;br /&gt;
* [[Projekt Julians Minecraftserver]]&lt;br /&gt;
* [[Projekt Julians Ark Server]]&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
=== External ===&lt;br /&gt;
&lt;br /&gt;
* [https://banzhaf.chickenkiller.com Webserver]&lt;br /&gt;
* [https://banzhaf.chickenkiller.com:8133 Minecraft DynMap] für Server banzhaf.chickenkiller.com:25575&lt;br /&gt;
* [https://banzhaf.chickenkiller.com/gopro/ GoPro]&lt;br /&gt;
* [https://banzhaf.chickenkiller.com/flowable-ui/ Flowable]&lt;br /&gt;
* [https://banzhaf.chickenkiller.com:3000 Grafana]&lt;br /&gt;
* [https://banzhaf.chickenkiller.com:7000 Jupyter]&lt;br /&gt;
&lt;br /&gt;
=== Internal ===&lt;br /&gt;
&lt;br /&gt;
* [https://qnap QNAP NAS]&lt;br /&gt;
* [http://192.168.1.221 fritzbox]&lt;br /&gt;
* [http://192.168.1.236 ax1]&lt;br /&gt;
* [http://192.168.1.237 ax2]&lt;br /&gt;
* [http://192.168.1.13 dm800]&lt;br /&gt;
* [http://192.168.1.15 vu-uno]&lt;br /&gt;
* [http://192.168.1.16 vuzero]&lt;br /&gt;
* [https://192.168.1.32 JobaCam]&lt;br /&gt;
* [http://192.168.1.55 Kyocera M5526cdn Printer]&lt;br /&gt;
* [http://192.168.1.4:8123 Minecraft Map]&lt;br /&gt;
* [http://192.168.1.4/fmcs Fluid Minecraft Stats]&lt;br /&gt;
* [https://github.com/joba-1/ My Github Repo]&lt;br /&gt;
* [http://192.168.1.4:8888/#/Dashboard Domoticz]&lt;br /&gt;
* [http://192.168.1.4:8000/ Trac Wiki]&lt;br /&gt;
* [https://banzhaf.chickenkiller.com:3000/d/lUpjxBfZk/ttn-thp84-device?from=now-30d&amp;amp;to=now TTN THP84 Grafana Dashboard]&lt;br /&gt;
* 3D-Printer [http://delta1/cm?cmnd=Power1%20On ON]  [http://delta1/cm?cmnd=Power1%20Off OFF] [http://pi2/ OctoPrint]&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_LetsEncrypt&amp;diff=15997</id>
		<title>Project LetsEncrypt</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_LetsEncrypt&amp;diff=15997"/>
		<updated>2025-06-01T05:39:34Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Let&#039;s Encrypt =&lt;br /&gt;
&lt;br /&gt;
I replaced my self signed certs of my dyndns domain with official ones from [[https://letsencrypt.org/ Let’s Encrypt]]:&lt;br /&gt;
&lt;br /&gt;
== Current Process ==&lt;br /&gt;
&lt;br /&gt;
=== Install ===&lt;br /&gt;
&lt;br /&gt;
 sudo zypper in certbot-systemd-timer&lt;br /&gt;
 sudo systemctl enable certbot-renew.timer&lt;br /&gt;
 sudo systemctl start certbot-renew.timer&lt;br /&gt;
&lt;br /&gt;
also install renewal scripts for fritzbox, openwrt, qnap, grafana (see post hooks below, but except apache and fritzbox, direct external access is not usually enabled/used) &lt;br /&gt;
&lt;br /&gt;
also needed: python311-certbot-apache&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
/etc/letsencrypt/renewal-hooks/post:&lt;br /&gt;
 lrwxrwxrwx 1 root root   38 Oct 15  2018 fritzbox-cert-update.sh -&amp;gt; /usr/local/bin/fritzbox-cert-update.sh&lt;br /&gt;
 lrwxrwxrwx 1 root root   37 Jul  7  2021 openwrt-cert-update.sh -&amp;gt; /usr/local/bin/openwrt-cert-update.sh&lt;br /&gt;
 -rwxr-xr-x 1 root root 1306 Mar 23  2022 mosquitto-copy.sh&lt;br /&gt;
 -rwxr-xr-x 1 root root   53 Aug  7  2022 grafana-restart.sh&lt;br /&gt;
 lrwxrwxrwx 1 root root   34 Oct 15  2022 qnap-cert-update.sh -&amp;gt; /usr/local/bin/qnap-cert-update.sh&lt;br /&gt;
&lt;br /&gt;
* qnap needs /etc/letsencrypt/id_rsa.letsencrypt.pub in qnap:~admin/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== Check ===&lt;br /&gt;
&lt;br /&gt;
note: starting the service (directly or via timer) uses a random delay of several minutes&lt;br /&gt;
&lt;br /&gt;
==== Date of cert files ====&lt;br /&gt;
/etc/letsencrypt/live/banzhaf.chickenkiller.com:&lt;br /&gt;
 -rw-r--r-- 1 root root 682 Aug  4  2018 README&lt;br /&gt;
 lrwxrwxrwx 1 root root  53 Aug 12 11:13 privkey.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/privkey30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  55 Aug 12 11:13 fullchain.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/fullchain30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  51 Aug 12 11:13 chain.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/chain30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  50 Aug 12 11:13 cert.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/cert30.pem&lt;br /&gt;
&lt;br /&gt;
==== Systemd status ====&lt;br /&gt;
&lt;br /&gt;
 systemctl status certbot-renew.timer&lt;br /&gt;
&lt;br /&gt;
==== Journal ====&lt;br /&gt;
&lt;br /&gt;
 journalctl -u certbot-renew.service&lt;br /&gt;
 journalctl -f -u certbot-renew.service&lt;br /&gt;
 &lt;br /&gt;
== Request First Cert ==&lt;br /&gt;
&lt;br /&gt;
 ssh root@job4&lt;br /&gt;
 cd /usr/local/bin&lt;br /&gt;
 sudo wget https://dl.eff.org/certbot-auto&lt;br /&gt;
 sudo certbot-auto --apache&lt;br /&gt;
&lt;br /&gt;
== Apache Config Preparation ==&lt;br /&gt;
&lt;br /&gt;
At first, this did not work. The script needs a vhost for port 80, so I created one:&lt;br /&gt;
&lt;br /&gt;
/etc/apache2/vhosts.d/vhost-chickenkiller.conf:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerAdmin joachim.banzhaf@gmail.com&lt;br /&gt;
    ServerName banzhaf.chickenkiller.com&lt;br /&gt;
    ServerAlias banzhaf.chickenkiller.com&lt;br /&gt;
    DocumentRoot /srv/www/htdocs&lt;br /&gt;
    ErrorLog /var/log/apache2/error.log&lt;br /&gt;
    CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it complained about syntax errors in my apache config that I needed to fix (quotes not closed).&lt;br /&gt;
Finally the validation failed due to access errors. I had to remove all old style access control&lt;br /&gt;
and use the new apache 2.4 style, which was more straightforward than I expected:&lt;br /&gt;
* remove all &amp;quot;Order deny/allow&amp;quot; stuff that was not ifdefd&lt;br /&gt;
* replace all &amp;quot;Allow/Deny from all&amp;quot; by &amp;quot;Require all granted/denied&amp;quot; if not ifdefd &lt;br /&gt;
* replace all &amp;quot;Allow from ip/hostname/net&amp;quot; by &amp;quot;Require host ip/hostname/net&amp;quot;&lt;br /&gt;
* remove module access_compat from /etc/sysconfig/apache2 variable APACHE_MODULES&lt;br /&gt;
* systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
The script offered to configure forwarding http to https, which I accepted.&lt;br /&gt;
I think it just added these lines to the virtual host file above:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{SERVER_NAME} =banzhaf.chickenkiller.com&lt;br /&gt;
 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&lt;br /&gt;
Now the cert was used and validated as safe (although chromium needed some time to accept it)&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
The cert is only valid for 90 days. Better automate the renewal.&lt;br /&gt;
It is enough to create this script&lt;br /&gt;
&lt;br /&gt;
/etc/cron.daily/certbot-auto-renew&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 python -c &#039;import random; import time; time.sleep(random.random() * 3600)&#039; &amp;amp;&amp;amp; /usr/local/bin/certbot-auto renew&lt;br /&gt;
&lt;br /&gt;
No idea why python came into the game. This should work as well...&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 sleep $((RANDOM/9)) &amp;amp;&amp;amp; /usr/local/bin/certbot-auto renew&lt;br /&gt;
&lt;br /&gt;
== Fritz Box Cert ==&lt;br /&gt;
&lt;br /&gt;
=== Automatic Update ===&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/joba-1/365b30c6378f2d1f38687fb87ed1f7c9 This script] logs into the fritzbox and updates the cert for you.&lt;br /&gt;
Just edit the variables at the start (user, pass, certpath). I use a separate fritzbox user for this.&lt;br /&gt;
&lt;br /&gt;
To make it even more easy: Store this script in /etc/letsencrypt/renewal-hooks/post and it gets run on updates (I&#039;ll see if that works in 2 months)&lt;br /&gt;
&lt;br /&gt;
=== Manual Update ===&lt;br /&gt;
&lt;br /&gt;
To use the cert with the fritz box web interface&lt;br /&gt;
&lt;br /&gt;
 ssh root@job4 &#039;cat /etc/letsencrypt/live/banzhaf.chickenkiller.com/[pf]*.pem&#039; &amp;gt;fritz.pem&lt;br /&gt;
&lt;br /&gt;
Then upload this file in the fritz box cert store with the web interface (Internet/Freigaben/Fritzbox Dienste/)&lt;br /&gt;
&lt;br /&gt;
== OpenWRT ==&lt;br /&gt;
&lt;br /&gt;
=== Manual Setup ===&lt;br /&gt;
copy cert (cat crt+key in one pem) to /etc/letsencrypt by post hook script&lt;br /&gt;
&lt;br /&gt;
add host to HOSTS in job4:/etc/letsencrypt/renewal-hooks/post/openwrt-cert-update.sh&lt;br /&gt;
&lt;br /&gt;
==== nginx ====&lt;br /&gt;
 uci set nginx._lan.ssl_certificate=/etc/letsencrypt/banzhaf.chickenkiller.com.pem&lt;br /&gt;
 uci set nginx._lan.ssl_certificate_key=/etc/letsencrypt/banzhaf.chickenkiller.com.pem&lt;br /&gt;
 uci set nginx._lan.uci_manage_ssl=&#039;my_letsencrypt&#039;&lt;br /&gt;
&lt;br /&gt;
==== uhttp (default) ====&lt;br /&gt;
 uci set uhttpd.main.key=&#039;/etc/letsencrypt/banzhaf.chickenkiller.com.pem&#039;&lt;br /&gt;
 uci set uhttpd.main.cert=&#039;/etc/letsencrypt/banzhaf.chickenkiller.com.pem&#039;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Renewal ===&lt;br /&gt;
&lt;br /&gt;
put this in /etc/letsencrypt/renewal-hooks/post (create the id_rsa.letsencrypt ssh key and deploy it to openwrt router /etc/letsencrypt/)&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 # parameters&lt;br /&gt;
 CERT_SRC=&amp;quot;/etc/letsencrypt/live/banzhaf.chickenkiller.com&amp;quot;&lt;br /&gt;
 CERT_DST=&amp;quot;/etc/letsencrypt&amp;quot;&lt;br /&gt;
 CERT_FILE=&amp;quot;banzhaf.chickenkiller.com.pem&amp;quot;&lt;br /&gt;
 SSH_ID=&amp;quot;/etc/letsencrypt/id_rsa.letsencrypt&amp;quot;&lt;br /&gt;
 HOSTS=&amp;quot;ax1 ax2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$CERT_SRC&amp;quot;&lt;br /&gt;
 for h in $HOSTS; do&lt;br /&gt;
    cat fullchain.pem privkey.pem | ssh -i &amp;quot;$SSH_ID&amp;quot; root@$h &amp;quot;mkdir -p &#039;$CERT_DST&#039; &amp;amp;&amp;amp; cat &amp;gt;&#039;$CERT_DST/$CERT_FILE&#039; &amp;amp;&amp;amp; /etc/init.d/uhttpd restart&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Grafana ==&lt;br /&gt;
&lt;br /&gt;
put this into /etc/grafana/grafana.ini&lt;br /&gt;
&lt;br /&gt;
 # https certs &amp;amp; key file&lt;br /&gt;
 cert_file = /etc/letsencrypt/live/banzhaf.chickenkiller.com/fullchain.pem&lt;br /&gt;
 cert_key = /etc/letsencrypt/live/banzhaf.chickenkiller.com/privkey.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then it just needs a restart on cert renewal by putting this to /etc/letsencrypt/renewal-hooks/post&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 systemctl restart grafana-server.service&lt;br /&gt;
&lt;br /&gt;
== Mosquitto Broker ==&lt;br /&gt;
&lt;br /&gt;
put this script in /etc/letsencrypt/renewal-hooks/post&lt;br /&gt;
&lt;br /&gt;
 MY_DOMAIN=banzhaf.chickenkiller.com&lt;br /&gt;
 CERTIFICATE_DIR=/etc/mosquitto/certs&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;${RENEWED_DOMAINS}&amp;quot; = &amp;quot;${MY_DOMAIN}&amp;quot; ]; then&lt;br /&gt;
    # Copy new certificate to Mosquitto directory&lt;br /&gt;
    cp ${RENEWED_LINEAGE}/fullchain.pem ${CERTIFICATE_DIR}/server.pem&lt;br /&gt;
    cp ${RENEWED_LINEAGE}/privkey.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Set ownership to Mosquitto&lt;br /&gt;
    chown mosquitto: ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Ensure permissions are restrictive&lt;br /&gt;
    chmod 0600 ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Tell Mosquitto to reload certificates and configuration&lt;br /&gt;
    pkill -HUP -x mosquitto&lt;br /&gt;
 fi&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15996</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15996"/>
		<updated>2025-05-08T17:33:06Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://sf8008|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_TTN_Daten_in_InfluxDB_f%C3%BCr_Grafana&amp;diff=15995</id>
		<title>Project TTN Daten in InfluxDB für Grafana</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_TTN_Daten_in_InfluxDB_f%C3%BCr_Grafana&amp;diff=15995"/>
		<updated>2025-02-23T11:58:46Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Tips and Tricks for InfluxDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Flexible Visualization of TTN Data =&lt;br /&gt;
&lt;br /&gt;
This page describes installing Grafana and InfluxDB on openSuse 42.2.&lt;br /&gt;
It also describes how to configure Apache 2.4 to receive data from a TheThingsNetwork applications.&lt;br /&gt;
It uses a TTN HTTP integration for a device like https://github.com/joba-1/ATTiny84TTN to store it in an InfluxDB database.&lt;br /&gt;
Finally it shows an example Grafana dashboard to display the data from the InfluxDB.&lt;br /&gt;
&lt;br /&gt;
Tested with my (The Things ID joba1) devices registered on https://eu1.cloud.thethings.network/console/&lt;br /&gt;
&lt;br /&gt;
== InfluxDB ==&lt;br /&gt;
&lt;br /&gt;
=== Installing InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
Here is the [https://portal.influxdata.com/downloads/ Download Portal]&lt;br /&gt;
Currently, it tells me to&lt;br /&gt;
&lt;br /&gt;
 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9.x86_64.rpm&lt;br /&gt;
 sudo zypper install influxdb-1.7.9.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
It warns about missing package shadow-util. On openSuse this is named shadow and is installed -&amp;gt; ignore.&lt;br /&gt;
&lt;br /&gt;
To use systemd for managing the database service, copy the service file&lt;br /&gt;
&lt;br /&gt;
 sudo cp -av /usr/lib/influxdb/scripts/influxdb.service /etc/systemd/system/&lt;br /&gt;
&lt;br /&gt;
For later versions of openSuse, [https://docs.influxdata.com/influxdb/v1.7/introduction/installation/# Influx Installation Documentation] suggests using a repository - should have the same results:&lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar -f obs://devel:languages:go/ go&lt;br /&gt;
 sudo zypper in influxdb&lt;br /&gt;
&lt;br /&gt;
=== Configure InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
I did not need to change anything here, but in case you want to check:&lt;br /&gt;
&lt;br /&gt;
 sudo vi /etc/influxdb/influxdb.conf&lt;br /&gt;
&lt;br /&gt;
For Flux query language (i tried on 1.8.5) you may need &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
[http] &lt;br /&gt;
flux-enabled = true&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Start InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl enable influxdb&lt;br /&gt;
 sudo systemctl start influxdb&lt;br /&gt;
 sudo systemctl status influxdb&lt;br /&gt;
&lt;br /&gt;
=== Test InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
Call the CLI and insert some test data. More details here: https://docs.influxdata.com/influxdb/v1.7/tools/shell/&lt;br /&gt;
&lt;br /&gt;
 influx&lt;br /&gt;
  CREATE DATABASE my_test_db&lt;br /&gt;
  USE my_test_db&lt;br /&gt;
  INSERT my_table,my_key=my_test my_value=1&lt;br /&gt;
  INSERT my_table,my_key=my_test my_value=2&lt;br /&gt;
  INSERT my_table,my_key=my_test my_value=3&lt;br /&gt;
  SELECT * FROM my_table&lt;br /&gt;
  QUIT&lt;br /&gt;
&lt;br /&gt;
=== Tips and Tricks for InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
==== Compactify data ====&lt;br /&gt;
&lt;br /&gt;
unfortunately it doesn&#039;t do miracles, but better than nothing.&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl stop influxdb&lt;br /&gt;
 sudo -u influxdb influx_inspect buildtsi -compact-series-file -datadir /var/lib/influxdb/data -waldir /var/lib/influxdb/wal&lt;br /&gt;
 sudo systemctl start influxdb&lt;br /&gt;
&lt;br /&gt;
last time (2025-02-23) it saved 0.5 GB of 10 GB&lt;br /&gt;
 &lt;br /&gt;
==== Delete measurements ====&lt;br /&gt;
&lt;br /&gt;
Sometimes invalid data gets into the database and needs to be cleaned.&lt;br /&gt;
InfluxDB does not allow to delete existing values, so brute force is the only option I know&lt;br /&gt;
The &amp;quot;group by *&amp;quot; is required to preserve tags according to docs, &lt;br /&gt;
&lt;br /&gt;
but it did NOT work for me:&lt;br /&gt;
&lt;br /&gt;
 influx --database ttn -execute &#039;SELECT * INTO temp FROM &amp;quot;measurements&amp;quot; WHERE pres_hPa &amp;gt; 700&#039;&lt;br /&gt;
 influx --database ttn -execute &#039;drop measurement &amp;quot;measurements&amp;quot;&#039;&lt;br /&gt;
 influx --database ttn -execute &#039;SELECT * INTO &amp;quot;measurements&amp;quot; FROM temp group by *&#039;&lt;br /&gt;
 influx --database ttn -execute &#039;drop measurement temp&#039;&lt;br /&gt;
&lt;br /&gt;
use the following python code&lt;br /&gt;
&lt;br /&gt;
==== Use Python to rework InfluxDB data ====&lt;br /&gt;
&lt;br /&gt;
Example code (to copy fields into tags with same name). See also https://github.com/joba-1/Stromableser/blob/main/fixStromableser.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from influxdb import InfluxDBClient&lt;br /&gt;
 &lt;br /&gt;
 # InfluxDB parameters&lt;br /&gt;
 server = &#039;job4&#039;&lt;br /&gt;
 port = 8086&lt;br /&gt;
 database=&#039;ttn&#039;&lt;br /&gt;
 &lt;br /&gt;
 # CLI interface&lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # read table &amp;quot;measurements&amp;quot;, fix anomalies and write into table &amp;quot;data&amp;quot;&lt;br /&gt;
    client = InfluxDBClient(host=server, port=port, database=database)&lt;br /&gt;
    response = client.query(&#039;select * from &amp;quot;measurements&amp;quot;&#039;, epoch=&#039;s&#039;)&lt;br /&gt;
    print(&amp;quot;Status: {}\n&amp;quot;.format(response.error))&lt;br /&gt;
    points = response.get_points()&lt;br /&gt;
    data = []&lt;br /&gt;
    for point in points:&lt;br /&gt;
        if point[&#039;app_id&#039;] == None:&lt;br /&gt;
            point[&#039;app_id&#039;] = point[&#039;app_id_1&#039;]&lt;br /&gt;
        point[&#039;app_id&#039;] = point[&#039;app_id&#039;].strip(&#039;&amp;quot;&#039;)&lt;br /&gt;
        point.pop(&#039;app_id_1&#039;,  None)&lt;br /&gt;
        if point[&#039;dev_id&#039;] == None:&lt;br /&gt;
            point[&#039;dev_id&#039;] = point[&#039;dev_id_1&#039;]&lt;br /&gt;
        point[&#039;dev_id&#039;] = point[&#039;dev_id&#039;].strip(&#039;&amp;quot;&#039;)&lt;br /&gt;
        point.pop(&#039;dev_id_1&#039;,  None)&lt;br /&gt;
        item = {&lt;br /&gt;
            &amp;quot;measurement&amp;quot;: &amp;quot;data&amp;quot;,&lt;br /&gt;
            &amp;quot;tags&amp;quot;: {&lt;br /&gt;
                &amp;quot;app_id&amp;quot;: point[&amp;quot;app_id&amp;quot;],&lt;br /&gt;
                &amp;quot;dev_id&amp;quot;: point[&amp;quot;dev_id&amp;quot;]&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;time&amp;quot;: point[&amp;quot;time&amp;quot;],&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                &amp;quot;temp_degC&amp;quot;: float(point[&amp;quot;temp_degC&amp;quot;]),&lt;br /&gt;
                &amp;quot;vcc_V&amp;quot;: float(point[&amp;quot;vcc_V&amp;quot;]),&lt;br /&gt;
                &amp;quot;pres_hPa&amp;quot;: float(point[&amp;quot;pres_hPa&amp;quot;]),&lt;br /&gt;
                &amp;quot;humi_Percent&amp;quot;: float(point[&amp;quot;humi_Percent&amp;quot;]),&lt;br /&gt;
                &amp;quot;gtw_id&amp;quot;: point[&amp;quot;gtw_id&amp;quot;],&lt;br /&gt;
                &amp;quot;rssi&amp;quot;: float(point[&amp;quot;rssi&amp;quot;])&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        data.append(item)&lt;br /&gt;
        if len(data) == 10000:&lt;br /&gt;
            print(&amp;quot;Add {} items&amp;quot;.format(len(data)))&lt;br /&gt;
            client.write_points(data, time_precision=&#039;s&#039;)&lt;br /&gt;
            data = []&lt;br /&gt;
    print(&amp;quot;Add {} items&amp;quot;.format(len(data)))&lt;br /&gt;
    client.write_points(data, time_precision=&#039;s&#039;)&lt;br /&gt;
&lt;br /&gt;
==== Post from ESP8266 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Post Data to InfluxDB&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ESP8266HTTPClient.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WiFiClient client;&lt;br /&gt;
HTTPClient http;&lt;br /&gt;
int _influx_status = 0;&lt;br /&gt;
&lt;br /&gt;
void post_data() {&lt;br /&gt;
  static const char Uri[]=&amp;quot;/write?db=&amp;quot; INFLUX_DB &amp;quot;&amp;amp;precision=s&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  char msg[300]; &lt;br /&gt;
  snprintf(msg, sizeof(msg), &lt;br /&gt;
    &amp;quot;temperatures zulauf=%.2f,ruecklauf=%.2f,vorlauf=%.2f,kamin=%.2f\n&amp;quot;,&lt;br /&gt;
    _temp_c[0], _temp_c[1], _temp_c[2], _temp_c[3]);&lt;br /&gt;
  http.begin(client, INFLUX_SERVER, INFLUX_PORT, Uri);&lt;br /&gt;
  http.setUserAgent(NAME);&lt;br /&gt;
  _influx_status = http.POST(msg);&lt;br /&gt;
  String payload = http.getString();&lt;br /&gt;
  http.end();&lt;br /&gt;
  if( _influx_status &amp;lt; 200 || _influx_status &amp;gt; 299 ) {&lt;br /&gt;
    snprintf(msg, sizeof(msg), &lt;br /&gt;
      &amp;quot;Post %s:%d%s status %d response &#039;%s&#039;&amp;quot;,&lt;br /&gt;
      INFLUX_SERVER, INFLUX_PORT, Uri, _influx_status, payload.c_str());&lt;br /&gt;
    syslog.log(LOG_ERR, msg);&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Grafana ==&lt;br /&gt;
&lt;br /&gt;
=== Install Grafana ===&lt;br /&gt;
&lt;br /&gt;
I now use leap supplied grafana 7.4. No need for the below&lt;br /&gt;
&lt;br /&gt;
Here are the [https://grafana.com/grafana/download installation instructions]. Basically just do&lt;br /&gt;
&lt;br /&gt;
 wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm &lt;br /&gt;
 sudo zypper install grafana-6.5.2-1.x86_64.rpm &lt;br /&gt;
&lt;br /&gt;
It complains about missing urw-fonts, but they are not really required -&amp;gt; ignore.&lt;br /&gt;
Also accept there is no signing key&lt;br /&gt;
&lt;br /&gt;
=== Grafana via Apache Proxy ===&lt;br /&gt;
&lt;br /&gt;
/etc/grafana/grafana.ini&lt;br /&gt;
 [server]&lt;br /&gt;
 protocol = http&lt;br /&gt;
 domain = banzhaf.chickenkiller.com&lt;br /&gt;
 root_url = https://banzhaf.chickenkiller.com/grafana&lt;br /&gt;
&lt;br /&gt;
/etc/apache2/conf.d/grafana.conf&lt;br /&gt;
 &amp;lt;Location &amp;quot;/grafana&amp;quot;&amp;gt;&lt;br /&gt;
   ProxyPass        &amp;quot;http://localhost:3000&amp;quot;&lt;br /&gt;
   ProxyPassReverse &amp;quot;http://localhost:3000&amp;quot;&lt;br /&gt;
 &amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Grafana Mails ===&lt;br /&gt;
&lt;br /&gt;
/etc/grafana/grafana.ini&lt;br /&gt;
 [smtp]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 host = smtp.gmail.com:587&lt;br /&gt;
 user = email.name@gmail.com&lt;br /&gt;
 password = app-password-for-above-email&lt;br /&gt;
 from_address = grafana@host.job&lt;br /&gt;
 from_name = Grafana&lt;br /&gt;
&lt;br /&gt;
=== Start Grafana ===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload &lt;br /&gt;
 sudo systemctl enable grafana-server.service &lt;br /&gt;
 sudo systemctl start grafana-server.service &lt;br /&gt;
 sudo systemctl status grafana-server.service&lt;br /&gt;
&lt;br /&gt;
=== Test Grafana ===&lt;br /&gt;
&lt;br /&gt;
Open http://localhost:3000&lt;br /&gt;
&lt;br /&gt;
Login as user admin and password admin. You will be asked for a new password immediately.&lt;br /&gt;
Go to the steps in the web UI: &lt;br /&gt;
* Add datasource&lt;br /&gt;
** Select InfluxDB&lt;br /&gt;
** Check use as default (optional)&lt;br /&gt;
** Select Query Language InfluxQL (Flux is also possible, but has no graphical query editor)&lt;br /&gt;
** Enter URL of your InfluxDB, e.g. http://localhost:8086&lt;br /&gt;
** Enter our test db in InfluxDB Details: my_test_db&lt;br /&gt;
** Select Save &amp;amp; Test should respond with success&lt;br /&gt;
* Add dashboard&lt;br /&gt;
** Go back to the first page via the Grafana symbol in the upper left and select New dashboard&lt;br /&gt;
** Select Add query&lt;br /&gt;
** Select measurement: my_table&lt;br /&gt;
** Select field: my_value&lt;br /&gt;
** optionally enter an alias: my_count&lt;br /&gt;
** Select next icon: Visualization&lt;br /&gt;
** Select Null values: connected (to draw lines between dots)&lt;br /&gt;
** Select Legend: Min and Max (to display them below the dashboard)&lt;br /&gt;
** Select next icon: General&lt;br /&gt;
** Enter a panel title&lt;br /&gt;
** We could add more panels, but for now: select Save dashboard icon and give it a name: My counts&lt;br /&gt;
** Select the region around the dot, repeat the zoom until you see the single values.&lt;br /&gt;
&lt;br /&gt;
=== Datasource with InfluxDB Query Language Flux ===&lt;br /&gt;
Supported at least since InfluxDB 1.8.5 with Grafana 7.4.2, needs to be enabled in influxdb.conf&lt;br /&gt;
* URL: unchanged, e.g. http://localhost:8086&lt;br /&gt;
* Access: unchanged (Server)&lt;br /&gt;
* Cookies: can stay empty&lt;br /&gt;
* Auth: can all stay disabled&lt;br /&gt;
* Custom HTTP headers: not needed&lt;br /&gt;
* Organization: like configured for Grafana (I use Banzhaf)&lt;br /&gt;
* Token: user:password&lt;br /&gt;
* Default Bucket: database name&lt;br /&gt;
* Min interval and max serias not needed&lt;br /&gt;
&lt;br /&gt;
== Python and Apache ==&lt;br /&gt;
&lt;br /&gt;
=== Insert JSON Values into InfluxDB with Python ===&lt;br /&gt;
&lt;br /&gt;
The ThingsNetwork offers an HTTP integration service.&lt;br /&gt;
It sends a POST request with JSON data to an URL you define each time your LoRaWAN device sends data.&lt;br /&gt;
Lets store this data with InfluxDB so we can display it with Grafana.&lt;br /&gt;
&lt;br /&gt;
As a first step, lets assume we somehow get the JSON data of one measurement in one line via standard input.&lt;br /&gt;
The script will parse the json, format a messages with the interesting fields (here including some poayload fileds from my thp84 app) post a request to the InfluxDB and print the result of that request.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import json&lt;br /&gt;
import requests&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
server = &#039;localhost&#039;&lt;br /&gt;
port = 8086&lt;br /&gt;
database=&#039;my_test_db&#039;&lt;br /&gt;
&lt;br /&gt;
url = &#039;http://{}:{}/write?db={}&amp;amp;precision=s&#039;.format(server, port, database)&lt;br /&gt;
&lt;br /&gt;
for line in sys.stdin:&lt;br /&gt;
    try:&lt;br /&gt;
        data = json.loads(line)&lt;br /&gt;
        ts = time.strptime(data[&amp;quot;metadata&amp;quot;][&amp;quot;time&amp;quot;].split(&#039;.&#039;, 1)[0], &#039;%Y-%m-%dT%H:%M:%S&#039;)&lt;br /&gt;
        msg = &#039;node,app_id=&amp;quot;{}&amp;quot;,dev_id=&amp;quot;{}&amp;quot; temp_degC={},vcc_V={},pres_hPa={},humi_Percent={},gtw_id=&amp;quot;{}&amp;quot;,rssi={} {}&#039;.format(&lt;br /&gt;
            data[&amp;quot;app_id&amp;quot;], data[&amp;quot;dev_id&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;temp_degC&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;vcc_V&amp;quot;],&lt;br /&gt;
            data[&amp;quot;payload_fields&amp;quot;][&amp;quot;pres_hPa&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;humi_Percent&amp;quot;], data[&amp;quot;metadata&amp;quot;][&amp;quot;gateways&amp;quot;][0][&amp;quot;gtw_id&amp;quot;],&lt;br /&gt;
            data[&amp;quot;metadata&amp;quot;][&amp;quot;gateways&amp;quot;][0][&amp;quot;rssi&amp;quot;], int(time.mktime(ts)))&lt;br /&gt;
        result = requests.post(url, data=msg)&lt;br /&gt;
        print(&#039;insert date &amp;quot;{}&amp;quot; result: &amp;quot;{}&amp;quot;&#039;.format(data[&amp;quot;metadata&amp;quot;][&amp;quot;time&amp;quot;], result.text))&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(&amp;quot;ignoring &#039;{}&#039;: &#039;{}&#039;&amp;quot;.format(line, e))&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call Python as CGI from Apache Webserver ===&lt;br /&gt;
&lt;br /&gt;
Next step is to use similar python code to insert the data automatically each time apache receives an HTTP request from The ThingsNetwork.&lt;br /&gt;
&lt;br /&gt;
* Enable the apache python module by adding &amp;quot;python&amp;quot; to the APACHE_MODULES line of /etc/sysconfig/apache2.&lt;br /&gt;
* Enable execution of python scripts in a directory by adding file /etc/apache2/conf.d/cgi-py.conf (basename not relevant, but needs to end in .conf):&lt;br /&gt;
 &amp;lt;Directory /srv/www/htdocs/ttn&amp;gt;&lt;br /&gt;
  Options +ExecCGI&lt;br /&gt;
  AddHandler cgi-script .py&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
* Create the directory and restart apache to load the new config&lt;br /&gt;
 mkdir /srv/www/htdocs/ttn&lt;br /&gt;
 systemctrl restart apache&lt;br /&gt;
* Create a python file in the configured directory that prints the whole html page, including headers and make the file executable&lt;br /&gt;
 vi /srv/www/htdocs/ttn/hello-cgi.py&lt;br /&gt;
 chmod +x /srv/www/htdocs/ttn/hello-cgi.py&lt;br /&gt;
* Content of a simple example file:&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 print(&amp;quot;Content-Type: text/html;charset=utf-8&amp;quot;)&lt;br /&gt;
 print()&lt;br /&gt;
 print(&amp;quot;Hello CGI World!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Call Python as WSGI from Apache Webserver ===&lt;br /&gt;
&lt;br /&gt;
WSGI is the more modern approach to calling python. To make it work,&lt;br /&gt;
&lt;br /&gt;
* Install apache module for wsgi and python3 (zypper in apache2-mod_wsgi-python3)&lt;br /&gt;
* If above step didn&#039;t do it, enable the apache wsgi module by adding &amp;quot;wsgi&amp;quot; to the APACHE_MODULES line of /etc/sysconfig/apache2.&lt;br /&gt;
* Enable execution of a python script by adding file /etc/apache2/conf.d/wsgi-py.conf (basename not relevant, but needs to end in .conf):&lt;br /&gt;
 WSGIScriptAlias /ttn/hello-wsgi.py /srv/www/htdocs/ttn/hello-wsgi.py&lt;br /&gt;
 &amp;lt;Directory /srv/www/htdocs/ttn&amp;gt;&lt;br /&gt;
    Require all granted&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
* Create the directory and restart apache to load the new config&lt;br /&gt;
 mkdir /srv/www/htdocs/ttn&lt;br /&gt;
 systemctrl restart apache&lt;br /&gt;
* Create the python file used in the alias that prints the whole html page, including headers and make the file executable&lt;br /&gt;
 vi /srv/www/htdocs/ttn/hello-wsgi.py&lt;br /&gt;
 chmod +x /srv/www/htdocs/ttn/hello-wsgi.py&lt;br /&gt;
* Content of a simple example file:&lt;br /&gt;
 def application(environ, start_response):&lt;br /&gt;
    status = &#039;200 OK&#039;&lt;br /&gt;
    output = b&#039;Hello WSGI World!&#039;&lt;br /&gt;
 &lt;br /&gt;
    response_headers = [(&#039;Content-type&#039;, &#039;text/plain&#039;),&lt;br /&gt;
                        (&#039;Content-Length&#039;, str(len(output)))]&lt;br /&gt;
    start_response(status, response_headers)&lt;br /&gt;
 &lt;br /&gt;
    return [output]&lt;br /&gt;
* A bit more involved example showing the environment and POST data (if any)&lt;br /&gt;
 import json&lt;br /&gt;
 &lt;br /&gt;
 def application(environ, start_response):&lt;br /&gt;
    status = &#039;200 OK&#039;&lt;br /&gt;
    output = &#039;Hello WSGI World!\n&#039;&lt;br /&gt;
 &lt;br /&gt;
    response_body = [&lt;br /&gt;
        &#039;%s: %s&#039; % (key, value) for key, value in sorted(environ.items())&lt;br /&gt;
    ]&lt;br /&gt;
    output += &#039;\n&#039;.join(response_body)&lt;br /&gt;
 &lt;br /&gt;
    try:&lt;br /&gt;
        if environ[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;:&lt;br /&gt;
            output += &amp;quot;\nPOST method&amp;quot;&lt;br /&gt;
        request_body_size = int(environ[&#039;CONTENT_LENGTH&#039;])&lt;br /&gt;
        request_body = environ[&#039;wsgi.input&#039;].read(request_body_size)&lt;br /&gt;
        s = &amp;quot;&amp;quot;.join(chr(b) for b in request_body)&lt;br /&gt;
        output += &amp;quot;\nData: &amp;quot; + s&lt;br /&gt;
        data = json.loads(s)&lt;br /&gt;
        output += &amp;quot;\nJson: &amp;quot; + json.dumps(data, sort_keys=True, indent=4)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        output += &amp;quot;\nException: &amp;quot; + str(e)&lt;br /&gt;
 &lt;br /&gt;
    response_headers = [(&#039;Content-type&#039;, &#039;text/plain&#039;),&lt;br /&gt;
                        (&#039;Content-Length&#039;, str(len(output)))]&lt;br /&gt;
    start_response(status, response_headers)&lt;br /&gt;
 &lt;br /&gt;
    return [output.encode(&#039;Utf-8&#039;)]&lt;br /&gt;
&lt;br /&gt;
Call this e.g. with&lt;br /&gt;
 wget -q -O- --post-data &#039;{&amp;quot;a&amp;quot;:1}&#039; http://localhost/ttn/hello-wsgi.py&lt;br /&gt;
&lt;br /&gt;
More infos about setting up wsgi are in the [https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html WSGI guidelines].&lt;br /&gt;
&lt;br /&gt;
=== Transform TTN JSON data to InfluxDB Inserts ===&lt;br /&gt;
&lt;br /&gt;
Modified python script to send POST request data from TTN to a logfile and insert data into InfluxDB&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
import requests&lt;br /&gt;
import time&lt;br /&gt;
import calendar&lt;br /&gt;
&lt;br /&gt;
# Log to contain the whole JSON objects from TTN&lt;br /&gt;
log_file = &#039;/var/log/ttn/thp84.log&#039;&lt;br /&gt;
&lt;br /&gt;
# InfluxDB parameters&lt;br /&gt;
server = &#039;localhost&#039;&lt;br /&gt;
port = 8086&lt;br /&gt;
database=&#039;ttn&#039;&lt;br /&gt;
url = &#039;http://{}:{}/write?db={}&amp;amp;precision=s&#039;.format(server, port, database)&lt;br /&gt;
&lt;br /&gt;
def application(environ, start_response):&lt;br /&gt;
    try:&lt;br /&gt;
        if environ[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
            # get data as received from TTN&lt;br /&gt;
            request_body_size = int(environ[&#039;CONTENT_LENGTH&#039;])&lt;br /&gt;
            request_body = environ[&#039;wsgi.input&#039;].read(request_body_size)&lt;br /&gt;
            body_string = &amp;quot;&amp;quot;.join(chr(b) for b in request_body)&lt;br /&gt;
&lt;br /&gt;
            # write received data to log file&lt;br /&gt;
            with open(log_file, &#039;a&#039;) as log:&lt;br /&gt;
                log.write(body_string)&lt;br /&gt;
                log.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
            # parse utc timestamp from TTN into time tuple&lt;br /&gt;
            data = json.loads(body_string)&lt;br /&gt;
            ts = time.strptime(data[&amp;quot;metadata&amp;quot;][&amp;quot;time&amp;quot;].split(&#039;.&#039;, 1)[0], &#039;%Y-%m-%dT%H:%M:%S&#039;)&lt;br /&gt;
&lt;br /&gt;
            # find gateway with best RSSI&lt;br /&gt;
            rssi = -999&lt;br /&gt;
            for gw in data[&amp;quot;metadata&amp;quot;][&amp;quot;gateways&amp;quot;]:&lt;br /&gt;
                if gw[&amp;quot;rssi&amp;quot;] &amp;gt; rssi:&lt;br /&gt;
                    rssi = gw[&amp;quot;rssi&amp;quot;]&lt;br /&gt;
                    gtw_id = gw[&amp;quot;gtw_id&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            # build InfluxDB insert string with explicit utc time in seconds resolution&lt;br /&gt;
            msg = &#039;measurements,app_id=&amp;quot;{}&amp;quot;,dev_id=&amp;quot;{}&amp;quot; temp_degC={},vcc_V={},pres_hPa={},humi_Percent={},gtw_id=&amp;quot;{}&amp;quot;,rssi={} {}&#039;.format(&lt;br /&gt;
                data[&amp;quot;app_id&amp;quot;], data[&amp;quot;dev_id&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;temp_degC&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;vcc_V&amp;quot;],&lt;br /&gt;
                data[&amp;quot;payload_fields&amp;quot;][&amp;quot;pres_hPa&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;humi_Percent&amp;quot;], gtw_id, rssi, int(calendar.timegm(ts)))&lt;br /&gt;
&lt;br /&gt;
            # send insert request to the database&lt;br /&gt;
            result = requests.post(url, data=msg)&lt;br /&gt;
            output = &#039;OK&#039;&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        output = &amp;quot;Exception: &amp;quot; + str(e)&lt;br /&gt;
&lt;br /&gt;
    # send OK to TTN&lt;br /&gt;
    status = &#039;200 OK&#039;&lt;br /&gt;
    response_headers = [(&#039;Content-type&#039;, &#039;text/plain&#039;),&lt;br /&gt;
                        (&#039;Content-Length&#039;, str(len(output)))]&lt;br /&gt;
    start_response(status, response_headers)&lt;br /&gt;
&lt;br /&gt;
    return [output.encode(&#039;Utf-8&#039;)]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Import Historic TTN Data ===&lt;br /&gt;
&lt;br /&gt;
Import data from logs into InfluxDB &lt;br /&gt;
&lt;br /&gt;
 cat /var/log/ttn/thp84.log | python3 thp84.py&lt;br /&gt;
&lt;br /&gt;
=== Grafana Dashboard for TTN Data from InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
build dashboard with a panel for each data item (like temperature, rssi, ...)&lt;br /&gt;
&lt;br /&gt;
An example is https://github.com/joba-1/ATTiny84TTN/blob/master/plots/Grafana-dashboard-TTN-thp84-Device.json&lt;br /&gt;
&lt;br /&gt;
[[File:TTN-thp84-Device-Grafana.png|600px]]&lt;br /&gt;
&lt;br /&gt;
My local dashboard: http://job4:3000/d/lUpjxBfZk/ttn-thp84-device?from=now-30d&amp;amp;to=now&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15994</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15994"/>
		<updated>2025-02-17T18:47:11Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** http://job4:8082/|Zigbee Gateway&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15993</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15993"/>
		<updated>2025-02-16T16:32:15Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Cha-cha-cha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/dev/mapper/fiovg-sapbak /backup/c/Users/d064412/Videos/&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* 3 x Valentino&lt;br /&gt;
* Dame rechts wedeln&lt;br /&gt;
* Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* Linksdrehung&lt;br /&gt;
* Viererschritt, vor Dame rechts drehen&lt;br /&gt;
** links vor - rechts seit - zurück, zurück, zusammendrehen, Rechtsdrehung&lt;br /&gt;
* Öffnen, Hinterkreuzen, Dame rechts rum in Grundposition, schnelle Linksdrehung?&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus (opening out, fan)&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker (kick cross)&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_TTN_Daten_in_InfluxDB_f%C3%BCr_Grafana&amp;diff=15992</id>
		<title>Project TTN Daten in InfluxDB für Grafana</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_TTN_Daten_in_InfluxDB_f%C3%BCr_Grafana&amp;diff=15992"/>
		<updated>2025-02-05T22:03:06Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Grafana via Apache Proxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Flexible Visualization of TTN Data =&lt;br /&gt;
&lt;br /&gt;
This page describes installing Grafana and InfluxDB on openSuse 42.2.&lt;br /&gt;
It also describes how to configure Apache 2.4 to receive data from a TheThingsNetwork applications.&lt;br /&gt;
It uses a TTN HTTP integration for a device like https://github.com/joba-1/ATTiny84TTN to store it in an InfluxDB database.&lt;br /&gt;
Finally it shows an example Grafana dashboard to display the data from the InfluxDB.&lt;br /&gt;
&lt;br /&gt;
Tested with my (The Things ID joba1) devices registered on https://eu1.cloud.thethings.network/console/&lt;br /&gt;
&lt;br /&gt;
== InfluxDB ==&lt;br /&gt;
&lt;br /&gt;
=== Installing InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
Here is the [https://portal.influxdata.com/downloads/ Download Portal]&lt;br /&gt;
Currently, it tells me to&lt;br /&gt;
&lt;br /&gt;
 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9.x86_64.rpm&lt;br /&gt;
 sudo zypper install influxdb-1.7.9.x86_64.rpm&lt;br /&gt;
&lt;br /&gt;
It warns about missing package shadow-util. On openSuse this is named shadow and is installed -&amp;gt; ignore.&lt;br /&gt;
&lt;br /&gt;
To use systemd for managing the database service, copy the service file&lt;br /&gt;
&lt;br /&gt;
 sudo cp -av /usr/lib/influxdb/scripts/influxdb.service /etc/systemd/system/&lt;br /&gt;
&lt;br /&gt;
For later versions of openSuse, [https://docs.influxdata.com/influxdb/v1.7/introduction/installation/# Influx Installation Documentation] suggests using a repository - should have the same results:&lt;br /&gt;
&lt;br /&gt;
 sudo zypper ar -f obs://devel:languages:go/ go&lt;br /&gt;
 sudo zypper in influxdb&lt;br /&gt;
&lt;br /&gt;
=== Configure InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
I did not need to change anything here, but in case you want to check:&lt;br /&gt;
&lt;br /&gt;
 sudo vi /etc/influxdb/influxdb.conf&lt;br /&gt;
&lt;br /&gt;
For Flux query language (i tried on 1.8.5) you may need &lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
[http] &lt;br /&gt;
flux-enabled = true&lt;br /&gt;
&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Start InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload&lt;br /&gt;
 sudo systemctl enable influxdb&lt;br /&gt;
 sudo systemctl start influxdb&lt;br /&gt;
 sudo systemctl status influxdb&lt;br /&gt;
&lt;br /&gt;
=== Test InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
Call the CLI and insert some test data. More details here: https://docs.influxdata.com/influxdb/v1.7/tools/shell/&lt;br /&gt;
&lt;br /&gt;
 influx&lt;br /&gt;
  CREATE DATABASE my_test_db&lt;br /&gt;
  USE my_test_db&lt;br /&gt;
  INSERT my_table,my_key=my_test my_value=1&lt;br /&gt;
  INSERT my_table,my_key=my_test my_value=2&lt;br /&gt;
  INSERT my_table,my_key=my_test my_value=3&lt;br /&gt;
  SELECT * FROM my_table&lt;br /&gt;
  QUIT&lt;br /&gt;
&lt;br /&gt;
=== Tips and Tricks for InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
==== Delete measurements ====&lt;br /&gt;
&lt;br /&gt;
Sometimes invalid data gets into the database and needs to be cleaned.&lt;br /&gt;
InfluxDB does not allow to delete existing values, so brute force is the only option I know&lt;br /&gt;
The &amp;quot;group by *&amp;quot; is required to preserve tags according to docs, &lt;br /&gt;
&lt;br /&gt;
but it did NOT work for me:&lt;br /&gt;
&lt;br /&gt;
 influx --database ttn -execute &#039;SELECT * INTO temp FROM &amp;quot;measurements&amp;quot; WHERE pres_hPa &amp;gt; 700&#039;&lt;br /&gt;
 influx --database ttn -execute &#039;drop measurement &amp;quot;measurements&amp;quot;&#039;&lt;br /&gt;
 influx --database ttn -execute &#039;SELECT * INTO &amp;quot;measurements&amp;quot; FROM temp group by *&#039;&lt;br /&gt;
 influx --database ttn -execute &#039;drop measurement temp&#039;&lt;br /&gt;
&lt;br /&gt;
use the following python code&lt;br /&gt;
&lt;br /&gt;
==== Use Python to rework InfluxDB data ====&lt;br /&gt;
&lt;br /&gt;
Example code (to copy fields into tags with same name). See also https://github.com/joba-1/Stromableser/blob/main/fixStromableser.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 from influxdb import InfluxDBClient&lt;br /&gt;
 &lt;br /&gt;
 # InfluxDB parameters&lt;br /&gt;
 server = &#039;job4&#039;&lt;br /&gt;
 port = 8086&lt;br /&gt;
 database=&#039;ttn&#039;&lt;br /&gt;
 &lt;br /&gt;
 # CLI interface&lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # read table &amp;quot;measurements&amp;quot;, fix anomalies and write into table &amp;quot;data&amp;quot;&lt;br /&gt;
    client = InfluxDBClient(host=server, port=port, database=database)&lt;br /&gt;
    response = client.query(&#039;select * from &amp;quot;measurements&amp;quot;&#039;, epoch=&#039;s&#039;)&lt;br /&gt;
    print(&amp;quot;Status: {}\n&amp;quot;.format(response.error))&lt;br /&gt;
    points = response.get_points()&lt;br /&gt;
    data = []&lt;br /&gt;
    for point in points:&lt;br /&gt;
        if point[&#039;app_id&#039;] == None:&lt;br /&gt;
            point[&#039;app_id&#039;] = point[&#039;app_id_1&#039;]&lt;br /&gt;
        point[&#039;app_id&#039;] = point[&#039;app_id&#039;].strip(&#039;&amp;quot;&#039;)&lt;br /&gt;
        point.pop(&#039;app_id_1&#039;,  None)&lt;br /&gt;
        if point[&#039;dev_id&#039;] == None:&lt;br /&gt;
            point[&#039;dev_id&#039;] = point[&#039;dev_id_1&#039;]&lt;br /&gt;
        point[&#039;dev_id&#039;] = point[&#039;dev_id&#039;].strip(&#039;&amp;quot;&#039;)&lt;br /&gt;
        point.pop(&#039;dev_id_1&#039;,  None)&lt;br /&gt;
        item = {&lt;br /&gt;
            &amp;quot;measurement&amp;quot;: &amp;quot;data&amp;quot;,&lt;br /&gt;
            &amp;quot;tags&amp;quot;: {&lt;br /&gt;
                &amp;quot;app_id&amp;quot;: point[&amp;quot;app_id&amp;quot;],&lt;br /&gt;
                &amp;quot;dev_id&amp;quot;: point[&amp;quot;dev_id&amp;quot;]&lt;br /&gt;
            },&lt;br /&gt;
            &amp;quot;time&amp;quot;: point[&amp;quot;time&amp;quot;],&lt;br /&gt;
            &amp;quot;fields&amp;quot;: {&lt;br /&gt;
                &amp;quot;temp_degC&amp;quot;: float(point[&amp;quot;temp_degC&amp;quot;]),&lt;br /&gt;
                &amp;quot;vcc_V&amp;quot;: float(point[&amp;quot;vcc_V&amp;quot;]),&lt;br /&gt;
                &amp;quot;pres_hPa&amp;quot;: float(point[&amp;quot;pres_hPa&amp;quot;]),&lt;br /&gt;
                &amp;quot;humi_Percent&amp;quot;: float(point[&amp;quot;humi_Percent&amp;quot;]),&lt;br /&gt;
                &amp;quot;gtw_id&amp;quot;: point[&amp;quot;gtw_id&amp;quot;],&lt;br /&gt;
                &amp;quot;rssi&amp;quot;: float(point[&amp;quot;rssi&amp;quot;])&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        data.append(item)&lt;br /&gt;
        if len(data) == 10000:&lt;br /&gt;
            print(&amp;quot;Add {} items&amp;quot;.format(len(data)))&lt;br /&gt;
            client.write_points(data, time_precision=&#039;s&#039;)&lt;br /&gt;
            data = []&lt;br /&gt;
    print(&amp;quot;Add {} items&amp;quot;.format(len(data)))&lt;br /&gt;
    client.write_points(data, time_precision=&#039;s&#039;)&lt;br /&gt;
&lt;br /&gt;
==== Post from ESP8266 ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Post Data to InfluxDB&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;ESP8266HTTPClient.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WiFiClient client;&lt;br /&gt;
HTTPClient http;&lt;br /&gt;
int _influx_status = 0;&lt;br /&gt;
&lt;br /&gt;
void post_data() {&lt;br /&gt;
  static const char Uri[]=&amp;quot;/write?db=&amp;quot; INFLUX_DB &amp;quot;&amp;amp;precision=s&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  char msg[300]; &lt;br /&gt;
  snprintf(msg, sizeof(msg), &lt;br /&gt;
    &amp;quot;temperatures zulauf=%.2f,ruecklauf=%.2f,vorlauf=%.2f,kamin=%.2f\n&amp;quot;,&lt;br /&gt;
    _temp_c[0], _temp_c[1], _temp_c[2], _temp_c[3]);&lt;br /&gt;
  http.begin(client, INFLUX_SERVER, INFLUX_PORT, Uri);&lt;br /&gt;
  http.setUserAgent(NAME);&lt;br /&gt;
  _influx_status = http.POST(msg);&lt;br /&gt;
  String payload = http.getString();&lt;br /&gt;
  http.end();&lt;br /&gt;
  if( _influx_status &amp;lt; 200 || _influx_status &amp;gt; 299 ) {&lt;br /&gt;
    snprintf(msg, sizeof(msg), &lt;br /&gt;
      &amp;quot;Post %s:%d%s status %d response &#039;%s&#039;&amp;quot;,&lt;br /&gt;
      INFLUX_SERVER, INFLUX_PORT, Uri, _influx_status, payload.c_str());&lt;br /&gt;
    syslog.log(LOG_ERR, msg);&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Grafana ==&lt;br /&gt;
&lt;br /&gt;
=== Install Grafana ===&lt;br /&gt;
&lt;br /&gt;
I now use leap supplied grafana 7.4. No need for the below&lt;br /&gt;
&lt;br /&gt;
Here are the [https://grafana.com/grafana/download installation instructions]. Basically just do&lt;br /&gt;
&lt;br /&gt;
 wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm &lt;br /&gt;
 sudo zypper install grafana-6.5.2-1.x86_64.rpm &lt;br /&gt;
&lt;br /&gt;
It complains about missing urw-fonts, but they are not really required -&amp;gt; ignore.&lt;br /&gt;
Also accept there is no signing key&lt;br /&gt;
&lt;br /&gt;
=== Grafana via Apache Proxy ===&lt;br /&gt;
&lt;br /&gt;
/etc/grafana/grafana.ini&lt;br /&gt;
 [server]&lt;br /&gt;
 protocol = http&lt;br /&gt;
 domain = banzhaf.chickenkiller.com&lt;br /&gt;
 root_url = https://banzhaf.chickenkiller.com/grafana&lt;br /&gt;
&lt;br /&gt;
/etc/apache2/conf.d/grafana.conf&lt;br /&gt;
 &amp;lt;Location &amp;quot;/grafana&amp;quot;&amp;gt;&lt;br /&gt;
   ProxyPass        &amp;quot;http://localhost:3000&amp;quot;&lt;br /&gt;
   ProxyPassReverse &amp;quot;http://localhost:3000&amp;quot;&lt;br /&gt;
 &amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Grafana Mails ===&lt;br /&gt;
&lt;br /&gt;
/etc/grafana/grafana.ini&lt;br /&gt;
 [smtp]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 host = smtp.gmail.com:587&lt;br /&gt;
 user = email.name@gmail.com&lt;br /&gt;
 password = app-password-for-above-email&lt;br /&gt;
 from_address = grafana@host.job&lt;br /&gt;
 from_name = Grafana&lt;br /&gt;
&lt;br /&gt;
=== Start Grafana ===&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl daemon-reload &lt;br /&gt;
 sudo systemctl enable grafana-server.service &lt;br /&gt;
 sudo systemctl start grafana-server.service &lt;br /&gt;
 sudo systemctl status grafana-server.service&lt;br /&gt;
&lt;br /&gt;
=== Test Grafana ===&lt;br /&gt;
&lt;br /&gt;
Open http://localhost:3000&lt;br /&gt;
&lt;br /&gt;
Login as user admin and password admin. You will be asked for a new password immediately.&lt;br /&gt;
Go to the steps in the web UI: &lt;br /&gt;
* Add datasource&lt;br /&gt;
** Select InfluxDB&lt;br /&gt;
** Check use as default (optional)&lt;br /&gt;
** Select Query Language InfluxQL (Flux is also possible, but has no graphical query editor)&lt;br /&gt;
** Enter URL of your InfluxDB, e.g. http://localhost:8086&lt;br /&gt;
** Enter our test db in InfluxDB Details: my_test_db&lt;br /&gt;
** Select Save &amp;amp; Test should respond with success&lt;br /&gt;
* Add dashboard&lt;br /&gt;
** Go back to the first page via the Grafana symbol in the upper left and select New dashboard&lt;br /&gt;
** Select Add query&lt;br /&gt;
** Select measurement: my_table&lt;br /&gt;
** Select field: my_value&lt;br /&gt;
** optionally enter an alias: my_count&lt;br /&gt;
** Select next icon: Visualization&lt;br /&gt;
** Select Null values: connected (to draw lines between dots)&lt;br /&gt;
** Select Legend: Min and Max (to display them below the dashboard)&lt;br /&gt;
** Select next icon: General&lt;br /&gt;
** Enter a panel title&lt;br /&gt;
** We could add more panels, but for now: select Save dashboard icon and give it a name: My counts&lt;br /&gt;
** Select the region around the dot, repeat the zoom until you see the single values.&lt;br /&gt;
&lt;br /&gt;
=== Datasource with InfluxDB Query Language Flux ===&lt;br /&gt;
Supported at least since InfluxDB 1.8.5 with Grafana 7.4.2, needs to be enabled in influxdb.conf&lt;br /&gt;
* URL: unchanged, e.g. http://localhost:8086&lt;br /&gt;
* Access: unchanged (Server)&lt;br /&gt;
* Cookies: can stay empty&lt;br /&gt;
* Auth: can all stay disabled&lt;br /&gt;
* Custom HTTP headers: not needed&lt;br /&gt;
* Organization: like configured for Grafana (I use Banzhaf)&lt;br /&gt;
* Token: user:password&lt;br /&gt;
* Default Bucket: database name&lt;br /&gt;
* Min interval and max serias not needed&lt;br /&gt;
&lt;br /&gt;
== Python and Apache ==&lt;br /&gt;
&lt;br /&gt;
=== Insert JSON Values into InfluxDB with Python ===&lt;br /&gt;
&lt;br /&gt;
The ThingsNetwork offers an HTTP integration service.&lt;br /&gt;
It sends a POST request with JSON data to an URL you define each time your LoRaWAN device sends data.&lt;br /&gt;
Lets store this data with InfluxDB so we can display it with Grafana.&lt;br /&gt;
&lt;br /&gt;
As a first step, lets assume we somehow get the JSON data of one measurement in one line via standard input.&lt;br /&gt;
The script will parse the json, format a messages with the interesting fields (here including some poayload fileds from my thp84 app) post a request to the InfluxDB and print the result of that request.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import sys&lt;br /&gt;
import json&lt;br /&gt;
import requests&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
server = &#039;localhost&#039;&lt;br /&gt;
port = 8086&lt;br /&gt;
database=&#039;my_test_db&#039;&lt;br /&gt;
&lt;br /&gt;
url = &#039;http://{}:{}/write?db={}&amp;amp;precision=s&#039;.format(server, port, database)&lt;br /&gt;
&lt;br /&gt;
for line in sys.stdin:&lt;br /&gt;
    try:&lt;br /&gt;
        data = json.loads(line)&lt;br /&gt;
        ts = time.strptime(data[&amp;quot;metadata&amp;quot;][&amp;quot;time&amp;quot;].split(&#039;.&#039;, 1)[0], &#039;%Y-%m-%dT%H:%M:%S&#039;)&lt;br /&gt;
        msg = &#039;node,app_id=&amp;quot;{}&amp;quot;,dev_id=&amp;quot;{}&amp;quot; temp_degC={},vcc_V={},pres_hPa={},humi_Percent={},gtw_id=&amp;quot;{}&amp;quot;,rssi={} {}&#039;.format(&lt;br /&gt;
            data[&amp;quot;app_id&amp;quot;], data[&amp;quot;dev_id&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;temp_degC&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;vcc_V&amp;quot;],&lt;br /&gt;
            data[&amp;quot;payload_fields&amp;quot;][&amp;quot;pres_hPa&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;humi_Percent&amp;quot;], data[&amp;quot;metadata&amp;quot;][&amp;quot;gateways&amp;quot;][0][&amp;quot;gtw_id&amp;quot;],&lt;br /&gt;
            data[&amp;quot;metadata&amp;quot;][&amp;quot;gateways&amp;quot;][0][&amp;quot;rssi&amp;quot;], int(time.mktime(ts)))&lt;br /&gt;
        result = requests.post(url, data=msg)&lt;br /&gt;
        print(&#039;insert date &amp;quot;{}&amp;quot; result: &amp;quot;{}&amp;quot;&#039;.format(data[&amp;quot;metadata&amp;quot;][&amp;quot;time&amp;quot;], result.text))&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(&amp;quot;ignoring &#039;{}&#039;: &#039;{}&#039;&amp;quot;.format(line, e))&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Call Python as CGI from Apache Webserver ===&lt;br /&gt;
&lt;br /&gt;
Next step is to use similar python code to insert the data automatically each time apache receives an HTTP request from The ThingsNetwork.&lt;br /&gt;
&lt;br /&gt;
* Enable the apache python module by adding &amp;quot;python&amp;quot; to the APACHE_MODULES line of /etc/sysconfig/apache2.&lt;br /&gt;
* Enable execution of python scripts in a directory by adding file /etc/apache2/conf.d/cgi-py.conf (basename not relevant, but needs to end in .conf):&lt;br /&gt;
 &amp;lt;Directory /srv/www/htdocs/ttn&amp;gt;&lt;br /&gt;
  Options +ExecCGI&lt;br /&gt;
  AddHandler cgi-script .py&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
* Create the directory and restart apache to load the new config&lt;br /&gt;
 mkdir /srv/www/htdocs/ttn&lt;br /&gt;
 systemctrl restart apache&lt;br /&gt;
* Create a python file in the configured directory that prints the whole html page, including headers and make the file executable&lt;br /&gt;
 vi /srv/www/htdocs/ttn/hello-cgi.py&lt;br /&gt;
 chmod +x /srv/www/htdocs/ttn/hello-cgi.py&lt;br /&gt;
* Content of a simple example file:&lt;br /&gt;
 #!/usr/bin/env python&lt;br /&gt;
 print(&amp;quot;Content-Type: text/html;charset=utf-8&amp;quot;)&lt;br /&gt;
 print()&lt;br /&gt;
 print(&amp;quot;Hello CGI World!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=== Call Python as WSGI from Apache Webserver ===&lt;br /&gt;
&lt;br /&gt;
WSGI is the more modern approach to calling python. To make it work,&lt;br /&gt;
&lt;br /&gt;
* Install apache module for wsgi and python3 (zypper in apache2-mod_wsgi-python3)&lt;br /&gt;
* If above step didn&#039;t do it, enable the apache wsgi module by adding &amp;quot;wsgi&amp;quot; to the APACHE_MODULES line of /etc/sysconfig/apache2.&lt;br /&gt;
* Enable execution of a python script by adding file /etc/apache2/conf.d/wsgi-py.conf (basename not relevant, but needs to end in .conf):&lt;br /&gt;
 WSGIScriptAlias /ttn/hello-wsgi.py /srv/www/htdocs/ttn/hello-wsgi.py&lt;br /&gt;
 &amp;lt;Directory /srv/www/htdocs/ttn&amp;gt;&lt;br /&gt;
    Require all granted&lt;br /&gt;
 &amp;lt;/Directory&amp;gt;&lt;br /&gt;
* Create the directory and restart apache to load the new config&lt;br /&gt;
 mkdir /srv/www/htdocs/ttn&lt;br /&gt;
 systemctrl restart apache&lt;br /&gt;
* Create the python file used in the alias that prints the whole html page, including headers and make the file executable&lt;br /&gt;
 vi /srv/www/htdocs/ttn/hello-wsgi.py&lt;br /&gt;
 chmod +x /srv/www/htdocs/ttn/hello-wsgi.py&lt;br /&gt;
* Content of a simple example file:&lt;br /&gt;
 def application(environ, start_response):&lt;br /&gt;
    status = &#039;200 OK&#039;&lt;br /&gt;
    output = b&#039;Hello WSGI World!&#039;&lt;br /&gt;
 &lt;br /&gt;
    response_headers = [(&#039;Content-type&#039;, &#039;text/plain&#039;),&lt;br /&gt;
                        (&#039;Content-Length&#039;, str(len(output)))]&lt;br /&gt;
    start_response(status, response_headers)&lt;br /&gt;
 &lt;br /&gt;
    return [output]&lt;br /&gt;
* A bit more involved example showing the environment and POST data (if any)&lt;br /&gt;
 import json&lt;br /&gt;
 &lt;br /&gt;
 def application(environ, start_response):&lt;br /&gt;
    status = &#039;200 OK&#039;&lt;br /&gt;
    output = &#039;Hello WSGI World!\n&#039;&lt;br /&gt;
 &lt;br /&gt;
    response_body = [&lt;br /&gt;
        &#039;%s: %s&#039; % (key, value) for key, value in sorted(environ.items())&lt;br /&gt;
    ]&lt;br /&gt;
    output += &#039;\n&#039;.join(response_body)&lt;br /&gt;
 &lt;br /&gt;
    try:&lt;br /&gt;
        if environ[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;:&lt;br /&gt;
            output += &amp;quot;\nPOST method&amp;quot;&lt;br /&gt;
        request_body_size = int(environ[&#039;CONTENT_LENGTH&#039;])&lt;br /&gt;
        request_body = environ[&#039;wsgi.input&#039;].read(request_body_size)&lt;br /&gt;
        s = &amp;quot;&amp;quot;.join(chr(b) for b in request_body)&lt;br /&gt;
        output += &amp;quot;\nData: &amp;quot; + s&lt;br /&gt;
        data = json.loads(s)&lt;br /&gt;
        output += &amp;quot;\nJson: &amp;quot; + json.dumps(data, sort_keys=True, indent=4)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        output += &amp;quot;\nException: &amp;quot; + str(e)&lt;br /&gt;
 &lt;br /&gt;
    response_headers = [(&#039;Content-type&#039;, &#039;text/plain&#039;),&lt;br /&gt;
                        (&#039;Content-Length&#039;, str(len(output)))]&lt;br /&gt;
    start_response(status, response_headers)&lt;br /&gt;
 &lt;br /&gt;
    return [output.encode(&#039;Utf-8&#039;)]&lt;br /&gt;
&lt;br /&gt;
Call this e.g. with&lt;br /&gt;
 wget -q -O- --post-data &#039;{&amp;quot;a&amp;quot;:1}&#039; http://localhost/ttn/hello-wsgi.py&lt;br /&gt;
&lt;br /&gt;
More infos about setting up wsgi are in the [https://modwsgi.readthedocs.io/en/develop/user-guides/configuration-guidelines.html WSGI guidelines].&lt;br /&gt;
&lt;br /&gt;
=== Transform TTN JSON data to InfluxDB Inserts ===&lt;br /&gt;
&lt;br /&gt;
Modified python script to send POST request data from TTN to a logfile and insert data into InfluxDB&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import json&lt;br /&gt;
import requests&lt;br /&gt;
import time&lt;br /&gt;
import calendar&lt;br /&gt;
&lt;br /&gt;
# Log to contain the whole JSON objects from TTN&lt;br /&gt;
log_file = &#039;/var/log/ttn/thp84.log&#039;&lt;br /&gt;
&lt;br /&gt;
# InfluxDB parameters&lt;br /&gt;
server = &#039;localhost&#039;&lt;br /&gt;
port = 8086&lt;br /&gt;
database=&#039;ttn&#039;&lt;br /&gt;
url = &#039;http://{}:{}/write?db={}&amp;amp;precision=s&#039;.format(server, port, database)&lt;br /&gt;
&lt;br /&gt;
def application(environ, start_response):&lt;br /&gt;
    try:&lt;br /&gt;
        if environ[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
            # get data as received from TTN&lt;br /&gt;
            request_body_size = int(environ[&#039;CONTENT_LENGTH&#039;])&lt;br /&gt;
            request_body = environ[&#039;wsgi.input&#039;].read(request_body_size)&lt;br /&gt;
            body_string = &amp;quot;&amp;quot;.join(chr(b) for b in request_body)&lt;br /&gt;
&lt;br /&gt;
            # write received data to log file&lt;br /&gt;
            with open(log_file, &#039;a&#039;) as log:&lt;br /&gt;
                log.write(body_string)&lt;br /&gt;
                log.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
            # parse utc timestamp from TTN into time tuple&lt;br /&gt;
            data = json.loads(body_string)&lt;br /&gt;
            ts = time.strptime(data[&amp;quot;metadata&amp;quot;][&amp;quot;time&amp;quot;].split(&#039;.&#039;, 1)[0], &#039;%Y-%m-%dT%H:%M:%S&#039;)&lt;br /&gt;
&lt;br /&gt;
            # find gateway with best RSSI&lt;br /&gt;
            rssi = -999&lt;br /&gt;
            for gw in data[&amp;quot;metadata&amp;quot;][&amp;quot;gateways&amp;quot;]:&lt;br /&gt;
                if gw[&amp;quot;rssi&amp;quot;] &amp;gt; rssi:&lt;br /&gt;
                    rssi = gw[&amp;quot;rssi&amp;quot;]&lt;br /&gt;
                    gtw_id = gw[&amp;quot;gtw_id&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
            # build InfluxDB insert string with explicit utc time in seconds resolution&lt;br /&gt;
            msg = &#039;measurements,app_id=&amp;quot;{}&amp;quot;,dev_id=&amp;quot;{}&amp;quot; temp_degC={},vcc_V={},pres_hPa={},humi_Percent={},gtw_id=&amp;quot;{}&amp;quot;,rssi={} {}&#039;.format(&lt;br /&gt;
                data[&amp;quot;app_id&amp;quot;], data[&amp;quot;dev_id&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;temp_degC&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;vcc_V&amp;quot;],&lt;br /&gt;
                data[&amp;quot;payload_fields&amp;quot;][&amp;quot;pres_hPa&amp;quot;], data[&amp;quot;payload_fields&amp;quot;][&amp;quot;humi_Percent&amp;quot;], gtw_id, rssi, int(calendar.timegm(ts)))&lt;br /&gt;
&lt;br /&gt;
            # send insert request to the database&lt;br /&gt;
            result = requests.post(url, data=msg)&lt;br /&gt;
            output = &#039;OK&#039;&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        output = &amp;quot;Exception: &amp;quot; + str(e)&lt;br /&gt;
&lt;br /&gt;
    # send OK to TTN&lt;br /&gt;
    status = &#039;200 OK&#039;&lt;br /&gt;
    response_headers = [(&#039;Content-type&#039;, &#039;text/plain&#039;),&lt;br /&gt;
                        (&#039;Content-Length&#039;, str(len(output)))]&lt;br /&gt;
    start_response(status, response_headers)&lt;br /&gt;
&lt;br /&gt;
    return [output.encode(&#039;Utf-8&#039;)]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Import Historic TTN Data ===&lt;br /&gt;
&lt;br /&gt;
Import data from logs into InfluxDB &lt;br /&gt;
&lt;br /&gt;
 cat /var/log/ttn/thp84.log | python3 thp84.py&lt;br /&gt;
&lt;br /&gt;
=== Grafana Dashboard for TTN Data from InfluxDB ===&lt;br /&gt;
&lt;br /&gt;
build dashboard with a panel for each data item (like temperature, rssi, ...)&lt;br /&gt;
&lt;br /&gt;
An example is https://github.com/joba-1/ATTiny84TTN/blob/master/plots/Grafana-dashboard-TTN-thp84-Device.json&lt;br /&gt;
&lt;br /&gt;
[[File:TTN-thp84-Device-Grafana.png|600px]]&lt;br /&gt;
&lt;br /&gt;
My local dashboard: http://job4:3000/d/lUpjxBfZk/ttn-thp84-device?from=now-30d&amp;amp;to=now&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15991</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15991"/>
		<updated>2025-01-19T11:02:26Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Tango */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/dev/mapper/fiovg-sapbak /backup/c/Users/d064412/Videos/&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* 3 x Valentino&lt;br /&gt;
* Dame rechts wedeln&lt;br /&gt;
* Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* Linksdrehung&lt;br /&gt;
* Viererschritt, vor Dame rechts drehen&lt;br /&gt;
** links vor - rechts seit - zurück, zurück, zusammendrehen, Rechtsdrehung&lt;br /&gt;
* Öffnen, Hinterkreuzen, Dame rechts rum in Grundposition, schnelle Linksdrehung?&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15990</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15990"/>
		<updated>2025-01-19T11:01:34Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Tango */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/dev/mapper/fiovg-sapbak /backup/c/Users/d064412/Videos/&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* 3xValentino&lt;br /&gt;
* Dame rechts wedeln&lt;br /&gt;
* Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* Linksdrehung&lt;br /&gt;
* Viererschritt, vor Dame rechts drehen&lt;br /&gt;
** links vor - rechts seit - zurück, zurück, zusammendrehen, rechtsdrehung&lt;br /&gt;
* Öffnen, Hinterkreuzen, Dame rechts rum in Grundposition&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15989</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15989"/>
		<updated>2025-01-19T10:59:23Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Tango */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/dev/mapper/fiovg-sapbak /backup/c/Users/d064412/Videos/&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* 3xValentino&lt;br /&gt;
* Dame rechts wedeln&lt;br /&gt;
* Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* Linksdrehung&lt;br /&gt;
* Viererschritt, vor Dame drehen&lt;br /&gt;
* Öffnen, Hinterkreuzen, Dame rechts rum in Grundposition&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* links vor - rechts seit - zurück, zurück, zusammendrehen, rechtsdrehung&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_Tumbleweed&amp;diff=15988</id>
		<title>Project Tumbleweed</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_Tumbleweed&amp;diff=15988"/>
		<updated>2025-01-01T12:26:09Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update from Leap 15.3 to Tumbleweed ==&lt;br /&gt;
&lt;br /&gt;
see README.tumbleweed on share qnap:/joachim/ (or job4:/home/joachim/)&lt;br /&gt;
&lt;br /&gt;
possibly outdated:&lt;br /&gt;
&lt;br /&gt;
* Make sure all fio entries in fstab use nofail option&lt;br /&gt;
* Disabled reiserfs lv vid2vg/video -&amp;gt; save later...&lt;br /&gt;
* DL tumbleweed iso, write to stick with imagewriter, boot -&amp;gt; F11 -&amp;gt; stick&lt;br /&gt;
* Rebuilt iomemory.vsl like /root/README.fio-lvm&lt;br /&gt;
 # git clone https://github.com/snuf/iomemory-vsl&lt;br /&gt;
 cd iomemory-vsl&lt;br /&gt;
 git pull origin main&lt;br /&gt;
 # git checkout v4.20.1&lt;br /&gt;
 cd root/usr/src/iomemory-vsl-3.2.16/&lt;br /&gt;
 make gpl&lt;br /&gt;
 cp -av iomemory-vsl.ko /lib/modules/`uname -r`&lt;br /&gt;
 depmod&lt;br /&gt;
 modprobe -v iomemory-vsl&lt;br /&gt;
&lt;br /&gt;
* enabled community repos, installed nvidia, updated to G06, zypper dup --from &#039;Packman Repo&#039;, to remove flickering removed boot option nosimplefb=1&lt;br /&gt;
* (Undone: mv /usr/libexec/tracker-extract-3 /usr/libexec/tracker-extract-3.bak (used 100% cpu))&lt;br /&gt;
* sudo a2enmod wsgi for /etc/apache2/conf.d/ttn-py.conf&lt;br /&gt;
* Restart and enable mariadb to get JobaPedia running (mariadb was off due to needed manual checks for version change)&lt;br /&gt;
* Restart and enable influxdb after restoring /etc/influx/influx.conf from rpmsave (was disabled due to possibly incompatible version update)&lt;br /&gt;
* Restored /etc/services entries for DB2 from services.rpmsave (or complaines about db2nodes.cfg code 11) and restarted db2mspr service&lt;br /&gt;
  DB2_db2inst1	60000/tcp&lt;br /&gt;
  DB2_db2inst1_1	60001/tcp&lt;br /&gt;
  DB2_db2inst1_2	60002/tcp&lt;br /&gt;
  DB2_db2inst1_3	60003/tcp&lt;br /&gt;
  DB2_db2inst1_4	60004/tcp&lt;br /&gt;
  DB2_db2inst1_END	60005/tcp&lt;br /&gt;
  db2c_db2inst1	50001/tcp&lt;br /&gt;
  DB2_db2mspr	60006/tcp&lt;br /&gt;
  DB2_db2mspr_1	60007/tcp&lt;br /&gt;
  DB2_db2mspr_2	60008/tcp&lt;br /&gt;
  DB2_db2mspr_3	60009/tcp&lt;br /&gt;
  DB2_db2mspr_4	60010/tcp&lt;br /&gt;
  DB2_db2mspr_END	60011/tcp&lt;br /&gt;
  db2c_db2mspr	50002/tcp&lt;br /&gt;
* Copy php7 pdo_ibm.ini to /etc/php8/conf.d and recompile ibm_pdo (see also JobaPedia)&lt;br /&gt;
** inst php8-devel&lt;br /&gt;
** pecl update-channel-update pecl.php.net&lt;br /&gt;
** pecl install -f -n --ignore-errors pdo_ibm&lt;br /&gt;
*** use db2 install location /home/db2mspr/dsdriver&lt;br /&gt;
* Update domoticz (last tested with domoticz 2024.3, tumbleweed 2024-07-12/boost 0.85/cmake 3.30 and python 3.12.1)&lt;br /&gt;
** using cmake 3.25.2 (3.17 failed to detect own python)&lt;br /&gt;
** using boost &amp;gt;= 1_81, set USE_STATIC_BOOST = NO in CMakeLists.txt&lt;br /&gt;
** Update z-wave&lt;br /&gt;
*** git pull z-wave repo of user domoticz, checkout master&lt;br /&gt;
*** comment out null pointer access in AssociationCommandConfiguration.cpp twice&lt;br /&gt;
*** make, sudo make install&lt;br /&gt;
** git pull domoticz repo of user domoticz, checkout 2024.7 (latest as of 2025.1)&lt;br /&gt;
** set python env&lt;br /&gt;
 export PATH=/home/domoticz/python-3.12.1/bin:$PATH&lt;br /&gt;
 export PYTHONHOME=/home/domoticz/python-3.12.1/&lt;br /&gt;
 export PYTHONPATH=/home/domoticz/python-3.12.1/lib/python3.12:/home/domoticz/python-3.12.1/lib/python3.12/lib-dynload&lt;br /&gt;
 export LD_LIBRARY_PATH=/home/domoticz/python-3.12.1/lib&lt;br /&gt;
 pip3 install --upgrade pip&lt;br /&gt;
 pip3 install requests&lt;br /&gt;
** compile and install&lt;br /&gt;
 rm CMakeCache.txt&lt;br /&gt;
 cmake -DCMAKE_BUILD_TYPE=Release CMakeLists.txt&lt;br /&gt;
 make -j8&lt;br /&gt;
 make install&lt;br /&gt;
** adapt service file&lt;br /&gt;
 Environment=&amp;quot;PATH=/home/domoticz/python-3.12.1/bin:/home/domoticz/bin:/usr/local/bin:/usr/bin:/bin&amp;quot; &amp;quot;PYTHONHOME=/home/domoticz/python-3.12.1&amp;quot; &amp;quot;PYTHONPATH=/home/domoticz/python-3.12.1/lib/python3.12:/home/domoticz/python-3.12.1/lib/python3.12/lib-dynload&amp;quot; &amp;quot;LD_LIBRARY_PATH=/home/domoticz/python-3.12.1/lib/&amp;quot;&lt;br /&gt;
 ExecStart=/opt/domoticz/domoticz -daemon -syslog -pidfile /var/run/domoticz/domoticz.pid -www 8888 -sslwww 8443&lt;br /&gt;
** Adapt python clients for mq135 and airrohr to more secure json api&lt;br /&gt;
*** in domoticz add user (here sensors) with pw (here open) with user role and add devices to update to the user&lt;br /&gt;
*** in domoticz allow http for api requests&lt;br /&gt;
*** adapt http requests to use basic auth&lt;br /&gt;
 url = &amp;quot;http://{}/json.htm?type=command&amp;amp;param=udevice&amp;amp;idx={}&amp;amp;nvalue={}&amp;quot;.format(srv, idx, val)&lt;br /&gt;
 request = Request(url)&lt;br /&gt;
 base64string = base64.b64encode(b&#039;sensors:open&#039;).decode(&#039;utf-8&#039;)&lt;br /&gt;
 request.add_header(&amp;quot;Authorization&amp;quot;, &amp;quot;Basic {}&amp;quot;.format(base64string))&lt;br /&gt;
 page = urlopen(request)&lt;br /&gt;
** adapt service files&lt;br /&gt;
*** look for warnings in syslog during systemctl daemon-reload&lt;br /&gt;
*** remove output to syslog (obsolete)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_Tumbleweed&amp;diff=15987</id>
		<title>Project Tumbleweed</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_Tumbleweed&amp;diff=15987"/>
		<updated>2025-01-01T12:24:52Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update from Leap 15.3 to Tumbleweed ==&lt;br /&gt;
&lt;br /&gt;
see README.tumbleweed on share qnap:/joachim/ (or job4:/home/joachim/)&lt;br /&gt;
&lt;br /&gt;
possibly outdated:&lt;br /&gt;
&lt;br /&gt;
* Make sure all fio entries in fstab use nofail option&lt;br /&gt;
* Disabled reiserfs lv vid2vg/video -&amp;gt; save later...&lt;br /&gt;
* DL tumbleweed iso, write to stick with imagewriter, boot -&amp;gt; F11 -&amp;gt; stick&lt;br /&gt;
* Rebuilt iomemory.vsl like /root/README.fio-lvm&lt;br /&gt;
 # git clone https://github.com/snuf/iomemory-vsl&lt;br /&gt;
 cd iomemory-vsl&lt;br /&gt;
 git pull origin main&lt;br /&gt;
 # git checkout v4.20.1&lt;br /&gt;
 cd root/usr/src/iomemory-vsl-3.2.16/&lt;br /&gt;
 make gpl&lt;br /&gt;
 cp -av iomemory-vsl.ko /lib/modules/`uname -r`&lt;br /&gt;
 depmod&lt;br /&gt;
 modprobe -v iomemory-vsl&lt;br /&gt;
&lt;br /&gt;
* enabled community repos, installed nvidia, updated to G06, zypper dup --from &#039;Packman Repo&#039;, to remove flickering removed boot option nosimplefb=1&lt;br /&gt;
* (Undone: mv /usr/libexec/tracker-extract-3 /usr/libexec/tracker-extract-3.bak (used 100% cpu))&lt;br /&gt;
* sudo a2enmod wsgi for /etc/apache2/conf.d/ttn-py.conf&lt;br /&gt;
* Restart and enable mariadb to get JobaPedia running (mariadb was off due to needed manual checks for version change)&lt;br /&gt;
* Restart and enable influxdb after restoring /etc/influx/influx.conf from rpmsave (was disabled due to possibly incompatible version update)&lt;br /&gt;
* Restored /etc/services entries for DB2 from services.rpmsave (or complaines about db2nodes.cfg code 11) and restarted db2mspr service&lt;br /&gt;
  DB2_db2inst1	60000/tcp&lt;br /&gt;
  DB2_db2inst1_1	60001/tcp&lt;br /&gt;
  DB2_db2inst1_2	60002/tcp&lt;br /&gt;
  DB2_db2inst1_3	60003/tcp&lt;br /&gt;
  DB2_db2inst1_4	60004/tcp&lt;br /&gt;
  DB2_db2inst1_END	60005/tcp&lt;br /&gt;
  db2c_db2inst1	50001/tcp&lt;br /&gt;
  DB2_db2mspr	60006/tcp&lt;br /&gt;
  DB2_db2mspr_1	60007/tcp&lt;br /&gt;
  DB2_db2mspr_2	60008/tcp&lt;br /&gt;
  DB2_db2mspr_3	60009/tcp&lt;br /&gt;
  DB2_db2mspr_4	60010/tcp&lt;br /&gt;
  DB2_db2mspr_END	60011/tcp&lt;br /&gt;
  db2c_db2mspr	50002/tcp&lt;br /&gt;
* Copy php7 pdo_ibm.ini to /etc/php8/conf.d and recompile ibm_pdo (see also JobaPedia)&lt;br /&gt;
** inst php8-devel&lt;br /&gt;
** pecl update-channel-update pecl.php.net&lt;br /&gt;
** pecl install -f -n --ignore-errors pdo_ibm&lt;br /&gt;
*** use db2 install location /home/db2mspr/dsdriver&lt;br /&gt;
* Update domoticz (last tested with domoticz 2024.3, tumbleweed 2024-07-12/boost 0.85/cmake 3.30 and python 3.12.1)&lt;br /&gt;
** using cmake 3.25.2 (3.17 failed to detect own python)&lt;br /&gt;
** using boost &amp;gt;= 1_81, set USE_STATIC_BOOST = NO in CMakeLists.txt&lt;br /&gt;
** Update z-wave&lt;br /&gt;
*** git pull z-wave repo of user domoticz, checkout master&lt;br /&gt;
*** comment out null pointer access in AssociationCommandConfiguration.cpp twice&lt;br /&gt;
*** make, sudo make install&lt;br /&gt;
** git pull domoticz repo of user domoticz, checkout 2024.7 (latest as of 2025.1)&lt;br /&gt;
** set python env&lt;br /&gt;
 export PATH=/home/domoticz/python-3.12.1/bin:$PATH&lt;br /&gt;
 export PYTHONHOME=/home/domoticz/python-3.12.1/&lt;br /&gt;
 export PYTHONPATH=/home/domoticz/python-3.12.1/lib/python3.12:/home/domoticz/python-3.12.1/lib/python3.12/lib-dynload&lt;br /&gt;
 export LD_LIBRARY_PATH=/home/domoticz/python-3.12.1/lib&lt;br /&gt;
 pip3 install requests&lt;br /&gt;
** compile and install&lt;br /&gt;
 rm CMakeCache.txt&lt;br /&gt;
 cmake -DCMAKE_BUILD_TYPE=Release CMakeLists.txt&lt;br /&gt;
 make -j8&lt;br /&gt;
 make install&lt;br /&gt;
** adapt service file&lt;br /&gt;
 Environment=&amp;quot;PATH=/home/domoticz/python-3.12.1/bin:/home/domoticz/bin:/usr/local/bin:/usr/bin:/bin&amp;quot; &amp;quot;PYTHONHOME=/home/domoticz/python-3.12.1&amp;quot; &amp;quot;PYTHONPATH=/home/domoticz/python-3.12.1/lib/python3.12:/home/domoticz/python-3.12.1/lib/python3.12/lib-dynload&amp;quot; &amp;quot;LD_LIBRARY_PATH=/home/domoticz/python-3.12.1/lib/&amp;quot;&lt;br /&gt;
 ExecStart=/opt/domoticz/domoticz -daemon -syslog -pidfile /var/run/domoticz/domoticz.pid -www 8888 -sslwww 8443&lt;br /&gt;
** Adapt python clients for mq135 and airrohr to more secure json api&lt;br /&gt;
*** in domoticz add user (here sensors) with pw (here open) with user role and add devices to update to the user&lt;br /&gt;
*** in domoticz allow http for api requests&lt;br /&gt;
*** adapt http requests to use basic auth&lt;br /&gt;
 url = &amp;quot;http://{}/json.htm?type=command&amp;amp;param=udevice&amp;amp;idx={}&amp;amp;nvalue={}&amp;quot;.format(srv, idx, val)&lt;br /&gt;
 request = Request(url)&lt;br /&gt;
 base64string = base64.b64encode(b&#039;sensors:open&#039;).decode(&#039;utf-8&#039;)&lt;br /&gt;
 request.add_header(&amp;quot;Authorization&amp;quot;, &amp;quot;Basic {}&amp;quot;.format(base64string))&lt;br /&gt;
 page = urlopen(request)&lt;br /&gt;
** adapt service files&lt;br /&gt;
*** look for warnings in syslog during systemctl daemon-reload&lt;br /&gt;
*** remove output to syslog (obsolete)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15986</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15986"/>
		<updated>2024-11-29T00:44:41Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://shelly2|Rolladen&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15985</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15985"/>
		<updated>2024-10-04T00:12:46Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1 Treppe&lt;br /&gt;
** http://wled2|WLED 2 Garten&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15984</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15984"/>
		<updated>2024-10-04T00:11:55Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1&lt;br /&gt;
** http://wled2|WLED 2&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15983</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15983"/>
		<updated>2024-09-30T15:06:25Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/dev/mapper/fiovg-sapbak /backup/c/Users/d064412/Videos/&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* rechts Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* links Linksdrehung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* links vor - rechts seit - zurück, zurück, zusammendrehen, rechtsdrehung&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15982</id>
		<title>Tanzen</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Tanzen&amp;diff=15982"/>
		<updated>2024-09-30T15:00:54Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/backup/c/Users/d064412/Videos/&lt;br /&gt;
&lt;br /&gt;
= Walzer =&lt;br /&gt;
&lt;br /&gt;
* Anfang Takt 1 Rechts in Tanzrichtung&lt;br /&gt;
* 3/4 Takt&lt;br /&gt;
* 1 runter-weit, 2 hoch-kurz, 3 normal &lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* re 360&lt;br /&gt;
* li 270&lt;br /&gt;
* Promenade&lt;br /&gt;
* Flechte&lt;br /&gt;
* V6 light&lt;br /&gt;
* Telemark&lt;br /&gt;
* 3Wiege,3vor Drehung&lt;br /&gt;
* Schwan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 2T 360G rechts&lt;br /&gt;
* 1T Grund&lt;br /&gt;
* 2T 270G links&lt;br /&gt;
* Promenade (vor, rechts+90, ran), rechts (360+90), links (90)&lt;br /&gt;
* Flechte&lt;br /&gt;
* schnell rechts, rückkreuzen, 90 links, vorlogstep, rechts (360+90), links (90)&lt;br /&gt;
&lt;br /&gt;
genauer (alt)&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Grundschritt 2&lt;br /&gt;
** links vor - seit - ran&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung&lt;br /&gt;
** rechts 90° rechts vor - links 90° zurück - ran&lt;br /&gt;
** links 90° zurück - 90° vor - ran&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Flechte&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** ... &lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* 3/4 Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
* Kreuzschritt&lt;br /&gt;
** li vor, re seit, li ran&lt;br /&gt;
** ...&lt;br /&gt;
** re weit vor, li weit 90° rechts vor Dame, re 90° zurück&lt;br /&gt;
** 3/4 3er Wiegedrehung rechts&lt;br /&gt;
** 1/4 Drehung links in Tanzrichtung&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt 1&lt;br /&gt;
** rechts vor - seit - ran&lt;br /&gt;
* Ganze Linksdrehung&lt;br /&gt;
** links 60° links vor - rechts 60° zurück - ran &lt;br /&gt;
** rechts 60° links zurück - links 60° zurück - ran&lt;br /&gt;
&lt;br /&gt;
= Wiener Walzer =&lt;br /&gt;
&lt;br /&gt;
Anfang 30° links zur Tanzrichtung (so dass 2. Schritt raumgreifend in Tanzrichtung geht) Takt 1 rechts&lt;br /&gt;
&lt;br /&gt;
3/4 Takt schnell&lt;br /&gt;
&lt;br /&gt;
== Figurenfolgen ==&lt;br /&gt;
&lt;br /&gt;
* Rechtsdrehung (x*2 Takte)&lt;br /&gt;
* Zwischenschritt 1 (1 Takt)&lt;br /&gt;
** dabei 60° rechts&lt;br /&gt;
* Linksdrehung (x*2 Takte)&lt;br /&gt;
** Rückwärts kreuzen&lt;br /&gt;
* Zwischenschritt 2 (1 Takt)&lt;br /&gt;
** dabei 60° links&lt;br /&gt;
&lt;br /&gt;
wenn Arme bzw. Ellenbogen in Tanzrichtung zeigen, dann nach oben (ganze Körper beugen)&lt;br /&gt;
&lt;br /&gt;
= Foxtrott =&lt;br /&gt;
&lt;br /&gt;
Anfang links vor nach außen&lt;br /&gt;
&lt;br /&gt;
lang - lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
lang ist tief, kurz hoch (Fußspitze)&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts vor - links seit - rechts ran &lt;br /&gt;
* Wiegedrehung rechts&lt;br /&gt;
* Promenade mit Wechselschritt, danach Rechtsdrehung&lt;br /&gt;
* Linksdrehung (1, 2 in Tanzrichtung langsam; 3, 4 schnell, dabei 180° drehen und hoch).&lt;br /&gt;
* Rechtsdrehung 360+30, rückwärts kreuzen, 120° links, vor Logstep, Rechtsdrehung,&lt;br /&gt;
* V6&lt;br /&gt;
* Endlauf (Anfang wie V6 ausser etwas mehr Rechtsdrehung) dann statt Richtungswechsel weiterdrehen&lt;br /&gt;
&lt;br /&gt;
= Quickstep =&lt;br /&gt;
&lt;br /&gt;
wie Foxtrott ab 100bpm, aber nach Wiegedrehung nicht seit - schluss&lt;br /&gt;
&lt;br /&gt;
Grundrythmus: 1 lang, 2,3 kurz, 4 lang 5,6 kurz&lt;br /&gt;
&lt;br /&gt;
bisher 3 &amp;quot;Strecken&amp;quot; mit 2 Grundrythmen links rum + 1 Grundrythmus rechts rum in eine Ecke.&lt;br /&gt;
&lt;br /&gt;
== Strecke 1 ==&lt;br /&gt;
 &lt;br /&gt;
* 4 vor 2 li&lt;br /&gt;
* 2 li 4 Dame vorholen&lt;br /&gt;
* 2 re rück, ran 2 vor&lt;br /&gt;
&lt;br /&gt;
== Strecke 2 ==&lt;br /&gt;
&lt;br /&gt;
* 1 lang, 6 schnell links rum dann 4 lang 5,6 kurz, dann wieder Abschluss rechts rum&lt;br /&gt;
&lt;br /&gt;
== Strecke 3 ==&lt;br /&gt;
&lt;br /&gt;
* Anfang mit Telemark, 2 vor, in die Knie&lt;br /&gt;
* 180° ohne Schritte rechts drehen, dann wieder zurück, dann Grundrythmus rechts rum&lt;br /&gt;
&lt;br /&gt;
= Tango =&lt;br /&gt;
&lt;br /&gt;
Anfang links nach außen&lt;br /&gt;
&lt;br /&gt;
lang lang kurz kurz lang kurz kurz lang&lt;br /&gt;
&lt;br /&gt;
* rechts Wiegeschritt&lt;br /&gt;
* geradeaus Promenade&lt;br /&gt;
* links Linksdrehung&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* links vor - rechts seit - zurück, zurück, zusammendrehen, rechtsdrehung&lt;br /&gt;
&lt;br /&gt;
= Cha-cha-cha =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Dame raus&lt;br /&gt;
* Dame stoppen, Rückwärtspromenade, Sidekick&lt;br /&gt;
* 3x mitte, rausdrehen&lt;br /&gt;
* Beinschlenker&lt;br /&gt;
* &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links,rechts,links seite - rechts zurück - links vor - rechts,links,rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Fan (Dame ran, dann 90° links zurück, Damendrehung in...&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Seit - Kick - ran&lt;br /&gt;
&lt;br /&gt;
= Rumba =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen rechts seite - links vor - rechts zurück&lt;br /&gt;
 &lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor - rechts zurück - links seite - rechts zurück - links vor - rechts seite&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade vorwärts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Promenade rückwärts&lt;br /&gt;
* Hand to Hand&lt;br /&gt;
&lt;br /&gt;
= Jive =&lt;br /&gt;
&lt;br /&gt;
Anfang nach außen links vor, rechts zurück&lt;br /&gt;
&lt;br /&gt;
* Grundschritt&lt;br /&gt;
** links vor, rechts zurück - seite links-rechts-links - seite rechts links rechts&lt;br /&gt;
* Damendrehung&lt;br /&gt;
* Platzwechsel&lt;br /&gt;
* Spin (linke oder rechte Hand)&lt;br /&gt;
* Schritt vor &amp;quot;hüpfen&amp;quot;, dabei Dame parallel daneben)&lt;br /&gt;
&lt;br /&gt;
= Samba =&lt;br /&gt;
&lt;br /&gt;
Anfang rechts nach außen&lt;br /&gt;
&lt;br /&gt;
lang (dabei erst auf dann ab) - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
* Drehung rechts 4* 1/4&lt;br /&gt;
* Wischer 3*&lt;br /&gt;
* Promenade 4*&lt;br /&gt;
* Botafogo (Dame vor Herr 4* Seitenwechsel)&lt;br /&gt;
* Volta: nochmal selber Start wie Botafogo, 2. Schritt eher rück, dann hinteres Bein vorne vorbei, vorderes kurz stützen seitlich. Nach 2* Seitenwechsel, dann noch 2 Seitenwechsel&lt;br /&gt;
* Dame eindrehen (anzeigen durch Weg versperren)&lt;br /&gt;
&lt;br /&gt;
= Paso doble =&lt;br /&gt;
&lt;br /&gt;
* 2/4 Takt&lt;br /&gt;
* Start links in Tanzrichtung&lt;br /&gt;
&lt;br /&gt;
* 4 Schritte am Platz&lt;br /&gt;
* 4 Schritte vor&lt;br /&gt;
* Seit - ran - seit - ran mit Armbewegung&lt;br /&gt;
* Zurück mit oder ohne Damendrehung&lt;br /&gt;
&lt;br /&gt;
* Herr ein Schritt vor, Rest auf der Stelle, Dame mehr zurück, dann kommt Dame wieder ran: 4* vor (rechter Fuß links, linker Fuß rechts)&lt;br /&gt;
* Appell, rechts drehen an Dame vorbei. Rückfallschritt, Damendrehung Ende Herr Rücken zur Wand,&lt;br /&gt;
&lt;br /&gt;
* 1, 2, cha cha cha drei mal, 1, 2 rückwärts, 1,2 vor, 1,2 rück, cha cha cha auf 6 ran&lt;br /&gt;
&lt;br /&gt;
= Discofox =&lt;br /&gt;
&lt;br /&gt;
Lang - kurz - kurz&lt;br /&gt;
&lt;br /&gt;
= Lindy Hop =&lt;br /&gt;
&lt;br /&gt;
== Grundschritt ==&lt;br /&gt;
* li rück, vor, 1,2,3 n.l. seitwärts&lt;br /&gt;
* re vor, rück, 1,2,3 n.r. seitwärts&lt;br /&gt;
&lt;br /&gt;
== Figuren ==&lt;br /&gt;
* Dame rückwärts links raus und nach hinten beugen, wieder zurück&lt;br /&gt;
* Caree&lt;br /&gt;
** li r, v, 1,2,3 n.l mit 90° li&lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 180°; &lt;br /&gt;
** 2* Herr vor, Dame rück, 1,2,3 mit 90° li&lt;br /&gt;
* Dame n.l. links trennen, Twist, wieder zusammen&lt;br /&gt;
* Drehung im Uhrzeigersinn (wie Jive)&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15981</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15981"/>
		<updated>2024-09-12T16:33:49Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1&lt;br /&gt;
** http://wled2|WLED 2&lt;br /&gt;
** http://nat2:8080|LiFePO_Island&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15980</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15980"/>
		<updated>2024-09-12T15:23:35Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** https://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** https://fritz.box|Fritzbox&lt;br /&gt;
** https://ax4|AX Router Wohnzimmer&lt;br /&gt;
** https://ax3|AX Router Julian (DNS)&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1&lt;br /&gt;
** http://wled2|WLED 2&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15979</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;diff=15979"/>
		<updated>2024-09-12T15:21:36Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help-mediawiki&lt;br /&gt;
* Remote&lt;br /&gt;
** https://github.com/joba-1/|My Github Repo&lt;br /&gt;
** https://banzhaf.chickenkiller.com|Webserver&lt;br /&gt;
** https://banzhaf.chickenkiller.com/flowable-ui/|Flowable&lt;br /&gt;
** https://banzhaf.chickenkiller.com/grafana|Grafana&lt;br /&gt;
** https://banzhaf.chickenkiller.com:7000|Jupyter Hub&lt;br /&gt;
** https://banzhaf.chickenkiller.com/Web|Eibele Booking&lt;br /&gt;
** https://banzhaf.chickenkiller.com/nextcloud|My Next Cloud&lt;br /&gt;
** http://banzhaf.chickenkiller.com:8123|Home Assistant&lt;br /&gt;
** https://banzhaf.chickenkiller.com/mediawiki/index.php?title=MediaWiki:Sidebar&amp;amp;action=edit|Mediawiki Sidebar&lt;br /&gt;
* Local&lt;br /&gt;
** http://job4:8000/|Trac Wiki&lt;br /&gt;
** http://job4:8888/#/Dashboard|Domoticz&lt;br /&gt;
** https://qnap:4433|QNAP NAS&lt;br /&gt;
** http://fritz.box|Fritzbox&lt;br /&gt;
** http://ax4|AX Router Wohnzimmer&lt;br /&gt;
** http://ax3|AX Router Julian (DNS)&lt;br /&gt;
** http://vu-uno|Sat Receiver Wohnzimmer&lt;br /&gt;
** http://vuzero|Sat Receiver Schlafzimmer&lt;br /&gt;
** http://wled1|WLED 1&lt;br /&gt;
** http://wled2|WLED 2&lt;br /&gt;
** http://mqtt-rxv1600|RX-V1600&lt;br /&gt;
** http://intertechnogw|Intertechno Gateway&lt;br /&gt;
** http://kyo5526|Kyocera M5526cdn Printer&lt;br /&gt;
** http://job4/phpMyAdmin|MySQL Admin&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_LetsEncrypt&amp;diff=15978</id>
		<title>Project LetsEncrypt</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_LetsEncrypt&amp;diff=15978"/>
		<updated>2024-09-12T13:50:48Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Manual Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Let&#039;s Encrypt =&lt;br /&gt;
&lt;br /&gt;
I replaced my self signed certs of my dyndns domain with official ones from [[https://letsencrypt.org/ Let’s Encrypt]]:&lt;br /&gt;
&lt;br /&gt;
== Current Process ==&lt;br /&gt;
&lt;br /&gt;
=== Install ===&lt;br /&gt;
&lt;br /&gt;
 sudo zypper in certbot-systemd-timer&lt;br /&gt;
 sudo systemctl enable certbot-renew.timer&lt;br /&gt;
 sudo systemctl start certbot-renew.timer&lt;br /&gt;
&lt;br /&gt;
also install renewal scripts for fritzbox, openwrt, qnap, grafana (see post hooks below, but except apache and fritzbox, direct external access is not usually enabled/used) &lt;br /&gt;
&lt;br /&gt;
maybe also needed: python311-certbot-apache&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
/etc/letsencrypt/renewal-hooks/post:&lt;br /&gt;
 lrwxrwxrwx 1 root root   38 Oct 15  2018 fritzbox-cert-update.sh -&amp;gt; /usr/local/bin/fritzbox-cert-update.sh&lt;br /&gt;
 lrwxrwxrwx 1 root root   37 Jul  7  2021 openwrt-cert-update.sh -&amp;gt; /usr/local/bin/openwrt-cert-update.sh&lt;br /&gt;
 -rwxr-xr-x 1 root root 1306 Mar 23  2022 mosquitto-copy.sh&lt;br /&gt;
 -rwxr-xr-x 1 root root   53 Aug  7  2022 grafana-restart.sh&lt;br /&gt;
 lrwxrwxrwx 1 root root   34 Oct 15  2022 qnap-cert-update.sh -&amp;gt; /usr/local/bin/qnap-cert-update.sh&lt;br /&gt;
&lt;br /&gt;
* qnap needs /etc/letsencrypt/id_rsa.letsencrypt.pub in qnap:~admin/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== Check ===&lt;br /&gt;
&lt;br /&gt;
note: starting the service (directly or via timer) uses a random delay of several minutes&lt;br /&gt;
&lt;br /&gt;
==== Date of cert files ====&lt;br /&gt;
/etc/letsencrypt/live/banzhaf.chickenkiller.com:&lt;br /&gt;
 -rw-r--r-- 1 root root 682 Aug  4  2018 README&lt;br /&gt;
 lrwxrwxrwx 1 root root  53 Aug 12 11:13 privkey.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/privkey30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  55 Aug 12 11:13 fullchain.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/fullchain30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  51 Aug 12 11:13 chain.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/chain30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  50 Aug 12 11:13 cert.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/cert30.pem&lt;br /&gt;
&lt;br /&gt;
==== Systemd status ====&lt;br /&gt;
&lt;br /&gt;
 systemctl status certbot-renew.timer&lt;br /&gt;
&lt;br /&gt;
==== Journal ====&lt;br /&gt;
&lt;br /&gt;
 journalctl -u certbot-renew.service&lt;br /&gt;
 journalctl -f -u certbot-renew.service&lt;br /&gt;
 &lt;br /&gt;
== Request First Cert ==&lt;br /&gt;
&lt;br /&gt;
 ssh root@job4&lt;br /&gt;
 cd /usr/local/bin&lt;br /&gt;
 sudo wget https://dl.eff.org/certbot-auto&lt;br /&gt;
 sudo certbot-auto --apache&lt;br /&gt;
&lt;br /&gt;
== Apache Config Preparation ==&lt;br /&gt;
&lt;br /&gt;
At first, this did not work. The script needs a vhost for port 80, so I created one:&lt;br /&gt;
&lt;br /&gt;
/etc/apache2/vhosts.d/vhost-chickenkiller.conf:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerAdmin joachim.banzhaf@gmail.com&lt;br /&gt;
    ServerName banzhaf.chickenkiller.com&lt;br /&gt;
    ServerAlias banzhaf.chickenkiller.com&lt;br /&gt;
    DocumentRoot /srv/www/htdocs&lt;br /&gt;
    ErrorLog /var/log/apache2/error.log&lt;br /&gt;
    CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it complained about syntax errors in my apache config that I needed to fix (quotes not closed).&lt;br /&gt;
Finally the validation failed due to access errors. I had to remove all old style access control&lt;br /&gt;
and use the new apache 2.4 style, which was more straightforward than I expected:&lt;br /&gt;
* remove all &amp;quot;Order deny/allow&amp;quot; stuff that was not ifdefd&lt;br /&gt;
* replace all &amp;quot;Allow/Deny from all&amp;quot; by &amp;quot;Require all granted/denied&amp;quot; if not ifdefd &lt;br /&gt;
* replace all &amp;quot;Allow from ip/hostname/net&amp;quot; by &amp;quot;Require host ip/hostname/net&amp;quot;&lt;br /&gt;
* remove module access_compat from /etc/sysconfig/apache2 variable APACHE_MODULES&lt;br /&gt;
* systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
The script offered to configure forwarding http to https, which I accepted.&lt;br /&gt;
I think it just added these lines to the virtual host file above:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{SERVER_NAME} =banzhaf.chickenkiller.com&lt;br /&gt;
 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&lt;br /&gt;
Now the cert was used and validated as safe (although chromium needed some time to accept it)&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
The cert is only valid for 90 days. Better automate the renewal.&lt;br /&gt;
It is enough to create this script&lt;br /&gt;
&lt;br /&gt;
/etc/cron.daily/certbot-auto-renew&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 python -c &#039;import random; import time; time.sleep(random.random() * 3600)&#039; &amp;amp;&amp;amp; /usr/local/bin/certbot-auto renew&lt;br /&gt;
&lt;br /&gt;
No idea why python came into the game. This should work as well...&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 sleep $((RANDOM/9)) &amp;amp;&amp;amp; /usr/local/bin/certbot-auto renew&lt;br /&gt;
&lt;br /&gt;
== Fritz Box Cert ==&lt;br /&gt;
&lt;br /&gt;
=== Automatic Update ===&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/joba-1/365b30c6378f2d1f38687fb87ed1f7c9 This script] logs into the fritzbox and updates the cert for you.&lt;br /&gt;
Just edit the variables at the start (user, pass, certpath). I use a separate fritzbox user for this.&lt;br /&gt;
&lt;br /&gt;
To make it even more easy: Store this script in /etc/letsencrypt/renewal-hooks/post and it gets run on updates (I&#039;ll see if that works in 2 months)&lt;br /&gt;
&lt;br /&gt;
=== Manual Update ===&lt;br /&gt;
&lt;br /&gt;
To use the cert with the fritz box web interface&lt;br /&gt;
&lt;br /&gt;
 ssh root@job4 &#039;cat /etc/letsencrypt/live/banzhaf.chickenkiller.com/[pf]*.pem&#039; &amp;gt;fritz.pem&lt;br /&gt;
&lt;br /&gt;
Then upload this file in the fritz box cert store with the web interface (Internet/Freigaben/Fritzbox Dienste/)&lt;br /&gt;
&lt;br /&gt;
== OpenWRT ==&lt;br /&gt;
&lt;br /&gt;
=== Manual Setup ===&lt;br /&gt;
copy cert (cat crt+key in one pem) to /etc/letsencrypt by post hook script&lt;br /&gt;
&lt;br /&gt;
add host to HOSTS in job4:/etc/letsencrypt/renewal-hooks/post/openwrt-cert-update.sh&lt;br /&gt;
&lt;br /&gt;
==== nginx ====&lt;br /&gt;
 uci set nginx._lan.ssl_certificate=/etc/letsencrypt/banzhaf.chickenkiller.com.pem&lt;br /&gt;
 uci set nginx._lan.ssl_certificate_key=/etc/letsencrypt/banzhaf.chickenkiller.com.pem&lt;br /&gt;
 uci set nginx._lan.uci_manage_ssl=&#039;my_letsencrypt&#039;&lt;br /&gt;
&lt;br /&gt;
==== uhttp (default) ====&lt;br /&gt;
 uci set uhttpd.main.key=&#039;/etc/letsencrypt/banzhaf.chickenkiller.com.pem&#039;&lt;br /&gt;
 uci set uhttpd.main.cert=&#039;/etc/letsencrypt/banzhaf.chickenkiller.com.pem&#039;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Renewal ===&lt;br /&gt;
&lt;br /&gt;
put this in /etc/letsencrypt/renewal-hooks/post (create the id_rsa.letsencrypt ssh key and deploy it to openwrt router /etc/letsencrypt/)&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 # parameters&lt;br /&gt;
 CERT_SRC=&amp;quot;/etc/letsencrypt/live/banzhaf.chickenkiller.com&amp;quot;&lt;br /&gt;
 CERT_DST=&amp;quot;/etc/letsencrypt&amp;quot;&lt;br /&gt;
 CERT_FILE=&amp;quot;banzhaf.chickenkiller.com.pem&amp;quot;&lt;br /&gt;
 SSH_ID=&amp;quot;/etc/letsencrypt/id_rsa.letsencrypt&amp;quot;&lt;br /&gt;
 HOSTS=&amp;quot;ax1 ax2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$CERT_SRC&amp;quot;&lt;br /&gt;
 for h in $HOSTS; do&lt;br /&gt;
    cat fullchain.pem privkey.pem | ssh -i &amp;quot;$SSH_ID&amp;quot; root@$h &amp;quot;mkdir -p &#039;$CERT_DST&#039; &amp;amp;&amp;amp; cat &amp;gt;&#039;$CERT_DST/$CERT_FILE&#039; &amp;amp;&amp;amp; /etc/init.d/uhttpd restart&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Grafana ==&lt;br /&gt;
&lt;br /&gt;
put this into /etc/grafana/grafana.ini&lt;br /&gt;
&lt;br /&gt;
 # https certs &amp;amp; key file&lt;br /&gt;
 cert_file = /etc/letsencrypt/live/banzhaf.chickenkiller.com/fullchain.pem&lt;br /&gt;
 cert_key = /etc/letsencrypt/live/banzhaf.chickenkiller.com/privkey.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then it just needs a restart on cert renewal by putting this to /etc/letsencrypt/renewal-hooks/post&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 systemctl restart grafana-server.service&lt;br /&gt;
&lt;br /&gt;
== Mosquitto Broker ==&lt;br /&gt;
&lt;br /&gt;
put this script in /etc/letsencrypt/renewal-hooks/post&lt;br /&gt;
&lt;br /&gt;
 MY_DOMAIN=banzhaf.chickenkiller.com&lt;br /&gt;
 CERTIFICATE_DIR=/etc/mosquitto/certs&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;${RENEWED_DOMAINS}&amp;quot; = &amp;quot;${MY_DOMAIN}&amp;quot; ]; then&lt;br /&gt;
    # Copy new certificate to Mosquitto directory&lt;br /&gt;
    cp ${RENEWED_LINEAGE}/fullchain.pem ${CERTIFICATE_DIR}/server.pem&lt;br /&gt;
    cp ${RENEWED_LINEAGE}/privkey.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Set ownership to Mosquitto&lt;br /&gt;
    chown mosquitto: ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Ensure permissions are restrictive&lt;br /&gt;
    chmod 0600 ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Tell Mosquitto to reload certificates and configuration&lt;br /&gt;
    pkill -HUP -x mosquitto&lt;br /&gt;
 fi&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_LetsEncrypt&amp;diff=15977</id>
		<title>Project LetsEncrypt</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Project_LetsEncrypt&amp;diff=15977"/>
		<updated>2024-09-11T16:14:22Z</updated>

		<summary type="html">&lt;p&gt;Joachim: /* Manual Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Let&#039;s Encrypt =&lt;br /&gt;
&lt;br /&gt;
I replaced my self signed certs of my dyndns domain with official ones from [[https://letsencrypt.org/ Let’s Encrypt]]:&lt;br /&gt;
&lt;br /&gt;
== Current Process ==&lt;br /&gt;
&lt;br /&gt;
=== Install ===&lt;br /&gt;
&lt;br /&gt;
 sudo zypper in certbot-systemd-timer&lt;br /&gt;
 sudo systemctl enable certbot-renew.timer&lt;br /&gt;
 sudo systemctl start certbot-renew.timer&lt;br /&gt;
&lt;br /&gt;
also install renewal scripts for fritzbox, openwrt, qnap, grafana (see post hooks below, but except apache and fritzbox, direct external access is not usually enabled/used) &lt;br /&gt;
&lt;br /&gt;
maybe also needed: python311-certbot-apache&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
/etc/letsencrypt/renewal-hooks/post:&lt;br /&gt;
 lrwxrwxrwx 1 root root   38 Oct 15  2018 fritzbox-cert-update.sh -&amp;gt; /usr/local/bin/fritzbox-cert-update.sh&lt;br /&gt;
 lrwxrwxrwx 1 root root   37 Jul  7  2021 openwrt-cert-update.sh -&amp;gt; /usr/local/bin/openwrt-cert-update.sh&lt;br /&gt;
 -rwxr-xr-x 1 root root 1306 Mar 23  2022 mosquitto-copy.sh&lt;br /&gt;
 -rwxr-xr-x 1 root root   53 Aug  7  2022 grafana-restart.sh&lt;br /&gt;
 lrwxrwxrwx 1 root root   34 Oct 15  2022 qnap-cert-update.sh -&amp;gt; /usr/local/bin/qnap-cert-update.sh&lt;br /&gt;
&lt;br /&gt;
* qnap needs /etc/letsencrypt/id_rsa.letsencrypt.pub in qnap:~admin/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== Check ===&lt;br /&gt;
&lt;br /&gt;
note: starting the service (directly or via timer) uses a random delay of several minutes&lt;br /&gt;
&lt;br /&gt;
==== Date of cert files ====&lt;br /&gt;
/etc/letsencrypt/live/banzhaf.chickenkiller.com:&lt;br /&gt;
 -rw-r--r-- 1 root root 682 Aug  4  2018 README&lt;br /&gt;
 lrwxrwxrwx 1 root root  53 Aug 12 11:13 privkey.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/privkey30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  55 Aug 12 11:13 fullchain.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/fullchain30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  51 Aug 12 11:13 chain.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/chain30.pem&lt;br /&gt;
 lrwxrwxrwx 1 root root  50 Aug 12 11:13 cert.pem -&amp;gt; ../../archive/banzhaf.chickenkiller.com/cert30.pem&lt;br /&gt;
&lt;br /&gt;
==== Systemd status ====&lt;br /&gt;
&lt;br /&gt;
 systemctl status certbot-renew.timer&lt;br /&gt;
&lt;br /&gt;
==== Journal ====&lt;br /&gt;
&lt;br /&gt;
 journalctl -u certbot-renew.service&lt;br /&gt;
 journalctl -f -u certbot-renew.service&lt;br /&gt;
 &lt;br /&gt;
== Request First Cert ==&lt;br /&gt;
&lt;br /&gt;
 ssh root@job4&lt;br /&gt;
 cd /usr/local/bin&lt;br /&gt;
 sudo wget https://dl.eff.org/certbot-auto&lt;br /&gt;
 sudo certbot-auto --apache&lt;br /&gt;
&lt;br /&gt;
== Apache Config Preparation ==&lt;br /&gt;
&lt;br /&gt;
At first, this did not work. The script needs a vhost for port 80, so I created one:&lt;br /&gt;
&lt;br /&gt;
/etc/apache2/vhosts.d/vhost-chickenkiller.conf:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerAdmin joachim.banzhaf@gmail.com&lt;br /&gt;
    ServerName banzhaf.chickenkiller.com&lt;br /&gt;
    ServerAlias banzhaf.chickenkiller.com&lt;br /&gt;
    DocumentRoot /srv/www/htdocs&lt;br /&gt;
    ErrorLog /var/log/apache2/error.log&lt;br /&gt;
    CustomLog /var/log/apache2/access.log combined&lt;br /&gt;
 &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then it complained about syntax errors in my apache config that I needed to fix (quotes not closed).&lt;br /&gt;
Finally the validation failed due to access errors. I had to remove all old style access control&lt;br /&gt;
and use the new apache 2.4 style, which was more straightforward than I expected:&lt;br /&gt;
* remove all &amp;quot;Order deny/allow&amp;quot; stuff that was not ifdefd&lt;br /&gt;
* replace all &amp;quot;Allow/Deny from all&amp;quot; by &amp;quot;Require all granted/denied&amp;quot; if not ifdefd &lt;br /&gt;
* replace all &amp;quot;Allow from ip/hostname/net&amp;quot; by &amp;quot;Require host ip/hostname/net&amp;quot;&lt;br /&gt;
* remove module access_compat from /etc/sysconfig/apache2 variable APACHE_MODULES&lt;br /&gt;
* systemctl restart apache2&lt;br /&gt;
&lt;br /&gt;
The script offered to configure forwarding http to https, which I accepted.&lt;br /&gt;
I think it just added these lines to the virtual host file above:&lt;br /&gt;
&lt;br /&gt;
 RewriteEngine on&lt;br /&gt;
 RewriteCond %{SERVER_NAME} =banzhaf.chickenkiller.com&lt;br /&gt;
 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]&lt;br /&gt;
&lt;br /&gt;
Now the cert was used and validated as safe (although chromium needed some time to accept it)&lt;br /&gt;
&lt;br /&gt;
== Automation ==&lt;br /&gt;
&lt;br /&gt;
The cert is only valid for 90 days. Better automate the renewal.&lt;br /&gt;
It is enough to create this script&lt;br /&gt;
&lt;br /&gt;
/etc/cron.daily/certbot-auto-renew&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 python -c &#039;import random; import time; time.sleep(random.random() * 3600)&#039; &amp;amp;&amp;amp; /usr/local/bin/certbot-auto renew&lt;br /&gt;
&lt;br /&gt;
No idea why python came into the game. This should work as well...&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 sleep $((RANDOM/9)) &amp;amp;&amp;amp; /usr/local/bin/certbot-auto renew&lt;br /&gt;
&lt;br /&gt;
== Fritz Box Cert ==&lt;br /&gt;
&lt;br /&gt;
=== Automatic Update ===&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/joba-1/365b30c6378f2d1f38687fb87ed1f7c9 This script] logs into the fritzbox and updates the cert for you.&lt;br /&gt;
Just edit the variables at the start (user, pass, certpath). I use a separate fritzbox user for this.&lt;br /&gt;
&lt;br /&gt;
To make it even more easy: Store this script in /etc/letsencrypt/renewal-hooks/post and it gets run on updates (I&#039;ll see if that works in 2 months)&lt;br /&gt;
&lt;br /&gt;
=== Manual Update ===&lt;br /&gt;
&lt;br /&gt;
To use the cert with the fritz box web interface&lt;br /&gt;
&lt;br /&gt;
 ssh root@job4 &#039;cat /etc/letsencrypt/live/banzhaf.chickenkiller.com/[pf]*.pem&#039; &amp;gt;fritz.pem&lt;br /&gt;
&lt;br /&gt;
Then upload this file in the fritz box cert store with the web interface (Internet/Freigaben/Fritzbox Dienste/)&lt;br /&gt;
&lt;br /&gt;
== OpenWRT ==&lt;br /&gt;
&lt;br /&gt;
=== Manual Setup ===&lt;br /&gt;
copy cert (cat crt+key in one pem) to /etc/letsencrypt by post hook script&lt;br /&gt;
&lt;br /&gt;
==== nginx ====&lt;br /&gt;
 uci set nginx._lan.ssl_certificate=/etc/letsencrypt/banzhaf.chickenkiller.com.pem&lt;br /&gt;
 uci set nginx._lan.ssl_certificate_key=/etc/letsencrypt/banzhaf.chickenkiller.com.pem&lt;br /&gt;
 uci set nginx._lan.uci_manage_ssl=&#039;my_letsencrypt&#039;&lt;br /&gt;
&lt;br /&gt;
==== uhttp (default) ====&lt;br /&gt;
 uci set uhttpd.main.key=&#039;/etc/letsencrypt/banzhaf.chickenkiller.com.pem&#039;&lt;br /&gt;
 uci set uhttpd.main.cert=&#039;/etc/letsencrypt/banzhaf.chickenkiller.com.pem&#039;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Renewal ===&lt;br /&gt;
&lt;br /&gt;
put this in /etc/letsencrypt/renewal-hooks/post (create the id_rsa.letsencrypt ssh key and deploy it to openwrt router /etc/letsencrypt/)&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 # parameters&lt;br /&gt;
 CERT_SRC=&amp;quot;/etc/letsencrypt/live/banzhaf.chickenkiller.com&amp;quot;&lt;br /&gt;
 CERT_DST=&amp;quot;/etc/letsencrypt&amp;quot;&lt;br /&gt;
 CERT_FILE=&amp;quot;banzhaf.chickenkiller.com.pem&amp;quot;&lt;br /&gt;
 SSH_ID=&amp;quot;/etc/letsencrypt/id_rsa.letsencrypt&amp;quot;&lt;br /&gt;
 HOSTS=&amp;quot;ax1 ax2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 cd &amp;quot;$CERT_SRC&amp;quot;&lt;br /&gt;
 for h in $HOSTS; do&lt;br /&gt;
    cat fullchain.pem privkey.pem | ssh -i &amp;quot;$SSH_ID&amp;quot; root@$h &amp;quot;mkdir -p &#039;$CERT_DST&#039; &amp;amp;&amp;amp; cat &amp;gt;&#039;$CERT_DST/$CERT_FILE&#039; &amp;amp;&amp;amp; /etc/init.d/uhttpd restart&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
== Grafana ==&lt;br /&gt;
&lt;br /&gt;
put this into /etc/grafana/grafana.ini&lt;br /&gt;
&lt;br /&gt;
 # https certs &amp;amp; key file&lt;br /&gt;
 cert_file = /etc/letsencrypt/live/banzhaf.chickenkiller.com/fullchain.pem&lt;br /&gt;
 cert_key = /etc/letsencrypt/live/banzhaf.chickenkiller.com/privkey.pem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then it just needs a restart on cert renewal by putting this to /etc/letsencrypt/renewal-hooks/post&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 systemctl restart grafana-server.service&lt;br /&gt;
&lt;br /&gt;
== Mosquitto Broker ==&lt;br /&gt;
&lt;br /&gt;
put this script in /etc/letsencrypt/renewal-hooks/post&lt;br /&gt;
&lt;br /&gt;
 MY_DOMAIN=banzhaf.chickenkiller.com&lt;br /&gt;
 CERTIFICATE_DIR=/etc/mosquitto/certs&lt;br /&gt;
 &lt;br /&gt;
 if [ &amp;quot;${RENEWED_DOMAINS}&amp;quot; = &amp;quot;${MY_DOMAIN}&amp;quot; ]; then&lt;br /&gt;
    # Copy new certificate to Mosquitto directory&lt;br /&gt;
    cp ${RENEWED_LINEAGE}/fullchain.pem ${CERTIFICATE_DIR}/server.pem&lt;br /&gt;
    cp ${RENEWED_LINEAGE}/privkey.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Set ownership to Mosquitto&lt;br /&gt;
    chown mosquitto: ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Ensure permissions are restrictive&lt;br /&gt;
    chmod 0600 ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key&lt;br /&gt;
 &lt;br /&gt;
    # Tell Mosquitto to reload certificates and configuration&lt;br /&gt;
    pkill -HUP -x mosquitto&lt;br /&gt;
 fi&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Arome_Weather&amp;diff=15976</id>
		<title>Arome Weather</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=Arome_Weather&amp;diff=15976"/>
		<updated>2024-08-22T17:57:36Z</updated>

		<summary type="html">&lt;p&gt;Joachim: Created page with &amp;quot;== Arome ==  Arome is the finest grained weather model available for west germany (~1km^2). It is a french weather model. You can register a free  account to get detailed data. To construct api queries there is a web page available.  I use it to display detailed weather forecasts of selected locations with grafana. See service aromewheather, /home/joachim/bin/aromeweather.py  To add a new location: * Edit command parameters in /etc/systemd/system/aromeweather.service to...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Arome ==&lt;br /&gt;
&lt;br /&gt;
Arome is the finest grained weather model available for west germany (~1km^2).&lt;br /&gt;
It is a french weather model.&lt;br /&gt;
You can register a free  account to get detailed data.&lt;br /&gt;
To construct api queries there is a web page available.&lt;br /&gt;
&lt;br /&gt;
I use it to display detailed weather forecasts of selected locations with grafana.&lt;br /&gt;
See service aromewheather, /home/joachim/bin/aromeweather.py&lt;br /&gt;
&lt;br /&gt;
To add a new location:&lt;br /&gt;
* Edit command parameters in /etc/systemd/system/aromeweather.service to add the lat,lon pair to collect the data&lt;br /&gt;
* Add the location name/lat,lon mapping for grafana&lt;br /&gt;
 influx --database aromeweather --execute &#039;insert location,name=Renesse lat=51.74,lon=3.79&#039;&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
	<entry>
		<id>https://banzhaf.chickenkiller.com/mediawiki/index.php?title=HowTo&amp;diff=15975</id>
		<title>HowTo</title>
		<link rel="alternate" type="text/html" href="https://banzhaf.chickenkiller.com/mediawiki/index.php?title=HowTo&amp;diff=15975"/>
		<updated>2024-08-22T17:49:00Z</updated>

		<summary type="html">&lt;p&gt;Joachim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[MediaWiki Upgrade]]&lt;br /&gt;
* [[RT61 WLAN for Caros Medion Notebook with openSuse 10.3]]&lt;br /&gt;
* [[Add new hg Repo]]&lt;br /&gt;
* [[Revise hg Repo]]&lt;br /&gt;
* [[Use GPG mail signing and encryption with openSuse 10.3]]&lt;br /&gt;
* [[Install Mediatomb on dm7020 and dm800 (old)]]&lt;br /&gt;
* [[Install PS3MediaServer on job4 and job6]]&lt;br /&gt;
* [[Install Nvidia driver with openSUSE 11.3 while there is no repo]]&lt;br /&gt;
* [[DB2 database with LDAP instanceowner and users]]&lt;br /&gt;
* [[ZoneMinder install]]&lt;br /&gt;
* [[Retrieve Motorstorm Apocalypse Profile Data]]&lt;br /&gt;
* [[Fix wrong colours with flash/youtube and linux nvidia driver]]&lt;br /&gt;
* [[Set Android Debugging Permissions]]&lt;br /&gt;
* [[Cleanup Wiki from Mass Spam]]&lt;br /&gt;
* [[Make Developer CraftBukkit]]&lt;br /&gt;
* [[Install OpenNMS on openSUSE 12.2]]&lt;br /&gt;
* [[DB2 autostart with systemd]]&lt;br /&gt;
* [[Install vmware Player]]&lt;br /&gt;
* [[Microsoft Windows Download Images]]&lt;br /&gt;
* [[Shrink Sparse Disk Files of Windows VM Images]]&lt;br /&gt;
* [[Grow Windows 8.1 VM NTFS volume]]&lt;br /&gt;
* [[Play On Linux]]&lt;br /&gt;
* [[Java Update (Oracle)]]&lt;br /&gt;
* [[Openwrt on wlan-825]]&lt;br /&gt;
* [[Eclipse aktualisieren]]&lt;br /&gt;
* [[Trac at job4]]&lt;br /&gt;
* [[DV Video to x264 Conversion]]&lt;br /&gt;
* [[Pulse Audio Volume Reset Fix]]&lt;br /&gt;
* [[Repair hanging video playback with Nvidia driver]]&lt;br /&gt;
* [[Extract Audio from Video Stream with ffmpeg]]&lt;br /&gt;
* [[Provide a private Diaspora Pod]]&lt;br /&gt;
* [[Nvidia native driver brightness control with Leap 42.1]]&lt;br /&gt;
* [[DB2 with python]]&lt;br /&gt;
* [[Convert LV to striped]]&lt;br /&gt;
* [[Install Mosquitto MQTT]]&lt;br /&gt;
* [[Install Wings3D]]&lt;br /&gt;
* [[Install PlatformIO for Arduino, ESP8266, ESP32 and STM32]]&lt;br /&gt;
* [[Suggest changes with a Github Pull Request]]&lt;br /&gt;
* [[X2Go]]&lt;br /&gt;
* [[ESP32 Remote Debugging]]&lt;br /&gt;
* [[Downsize 4k Videos]]&lt;br /&gt;
* [[STM32 Development and Remote Debugging]]&lt;br /&gt;
* [[Youtube2Audio]]&lt;br /&gt;
* [[Save Chrome Passwords]]&lt;br /&gt;
* [[Update Marlin Firmware of Anycubic Kossel Pulley]]&lt;br /&gt;
* [[Google Test]]&lt;br /&gt;
* [[Fritz Box External IP]]&lt;br /&gt;
* [[Hadoop in Docker]]&lt;br /&gt;
* [[Start Systemd Service After Device Appears]]&lt;br /&gt;
* [[Install DB2 ModPack 11.5.5.0 over 11.5.0.0]]&lt;br /&gt;
* [[Modify GCode to restart 3D Print]]&lt;br /&gt;
* [[Optical Flow with OpenCV]]&lt;br /&gt;
* [[Vu+ Bootlogos]]&lt;br /&gt;
* [[Kicad PCB]]&lt;br /&gt;
* [[Nvidia Driver on Opensuse Leap 15.3]]&lt;br /&gt;
* [[Pulseaudio SPDIF Input, LFE remix]]&lt;br /&gt;
* [[Serial Bridge over WLAN with an ESP-01]]&lt;br /&gt;
* [[JupyterHub]]&lt;br /&gt;
* [[Fix IPC for DB2 with Opensuse 15.3]]&lt;br /&gt;
* [[Reapply for Fusion360 Personal Use]]&lt;br /&gt;
* [[Sandisk Usb3 Nvme Disk with Linux]]&lt;br /&gt;
* [[Make kernel.org Rpm for Tumbleweed]]&lt;br /&gt;
* [[Build any python version for venv]]&lt;br /&gt;
* [[German Keyboard Setting for 104-Keyboard]]&lt;br /&gt;
* [[Stream Playlist to iOS VLC]]&lt;br /&gt;
* [[DB2 Container on QNAP NAS]]&lt;br /&gt;
* [[SolarPower]]&lt;br /&gt;
* [[Enigma2Events]]&lt;br /&gt;
* [[Nvidia Delayed Frame Bug]]&lt;br /&gt;
* [[Poster Druck]]&lt;br /&gt;
* [[GoPro Sync]]&lt;br /&gt;
* [[Design Patterns]]&lt;br /&gt;
* [[Arome Weather]]&lt;/div&gt;</summary>
		<author><name>Joachim</name></author>
	</entry>
</feed>