]> pere.pagekite.me Git - homepage.git/commitdiff
Generated.
authorPetter Reinholdtsen <pere@hungry.com>
Sun, 8 Jan 2023 23:46:24 +0000 (00:46 +0100)
committerPetter Reinholdtsen <pere@hungry.com>
Sun, 8 Jan 2023 23:46:24 +0000 (00:46 +0100)
blog/archive/2022/12/12.rss [new file with mode: 0644]
blog/archive/2022/12/index.html [new file with mode: 0644]
blog/archive/2023/01/01.rss [new file with mode: 0644]
blog/archive/2023/01/index.html [new file with mode: 0644]
blog/tags/linuxcnc/index.html [new file with mode: 0644]
blog/tags/linuxcnc/linuxcnc.rss [new file with mode: 0644]

diff --git a/blog/archive/2022/12/12.rss b/blog/archive/2022/12/12.rss
new file mode 100644 (file)
index 0000000..31ff348
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
+       <channel>
+               <title>Petter Reinholdtsen - Entries from December 2022</title>
+               <description>Entries from December 2022</description>
+                <link>https://people.skolelinux.org/pere/blog/</link>
+
+       
+       <item>
+               <title>ONVIF IP camera management tool finally in Debian</title>
+               <link>https://people.skolelinux.org/pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html</link>        
+               <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html</guid>
+                <pubDate>Sat, 24 Dec 2022 08:00:00 +0100</pubDate>
+               <description>&lt;p&gt;Merry Christmas to you all.  Here is a small gift to all those with
+IP cameras following the &lt;a href=&quot;https://www.onvif.org/&quot;&gt;ONVIF
+specification&lt;/a&gt;.  There is finally a nice command line and GUI tool
+in Debian to manage ONVIF IP cameras.  After working with upstream for
+a few months and sponsoring the upload, I am very happy to report that
+the &lt;a href=&quot;https://tracker.debian.org/libonvif&quot;&gt;libonvif package&lt;/a&gt;
+entered Debian Sid last night.&lt;/p&gt;
+
+&lt;p&gt;The package provide a C library to communicate with such cameras, a
+command line tool to locate and update settings of (like password) the
+cameras and a GUI tool to configure and control the units as well as
+preview the video from the camera.  Libonvif is available on Both
+Linux and Windows and the GUI tool uses the Qt library.  The main
+competitors are non-free software, while libonvif is GNU GPL licensed.
+I am very glad Debian users in the future can control their cameras
+using a free software system provided by Debian.  But the ONVIF world
+is full of slightly broken firmware, where the cameras pretend to
+follow the ONVIF specification but fail to set some configuration
+values or refuse to provide video to more than one recipient at the
+time, and the onvif project is quite young and might take a while
+before it completely work with your camera.  Upstream seem eager to
+improve the library, so handling any broken camera might be just &lt;a
+href=&quot;https://github.com/sr99622/libonvif/&quot;&gt;a bug report away&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;The package just cleared NEW, and need a new source only upload
+before it can enter testing.  This will happen in the next few
+days.&lt;/p&gt;
+
+&lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+&lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
+</description>
+       </item>
+       
+        </channel>
+</rss>
diff --git a/blog/archive/2022/12/index.html b/blog/archive/2022/12/index.html
new file mode 100644 (file)
index 0000000..445f883
--- /dev/null
@@ -0,0 +1,625 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+    <title>Petter Reinholdtsen: entries from December 2022</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/style.css" />
+    <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/vim.css" />
+    <link rel="alternate" title="RSS Feed" href="12.rss" type="application/rss+xml" />
+  </head>
+  <body>
+    <!-- XML FEED -->
+    <div class="title">
+ <h1>
+     <a href="https://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
+     
+ </h1>
+</div>
+
+
+    <h3>Entries from December 2022.</h3>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="https://people.skolelinux.org/pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html">ONVIF IP camera management tool finally in Debian</a>
+      </div>
+      <div class="date">
+        24th December 2022
+      </div>
+      <div class="body">
+        <p>Merry Christmas to you all.  Here is a small gift to all those with
+IP cameras following the <a href="https://www.onvif.org/">ONVIF
+specification</a>.  There is finally a nice command line and GUI tool
+in Debian to manage ONVIF IP cameras.  After working with upstream for
+a few months and sponsoring the upload, I am very happy to report that
+the <a href="https://tracker.debian.org/libonvif">libonvif package</a>
+entered Debian Sid last night.</p>
+
+<p>The package provide a C library to communicate with such cameras, a
+command line tool to locate and update settings of (like password) the
+cameras and a GUI tool to configure and control the units as well as
+preview the video from the camera.  Libonvif is available on Both
+Linux and Windows and the GUI tool uses the Qt library.  The main
+competitors are non-free software, while libonvif is GNU GPL licensed.
+I am very glad Debian users in the future can control their cameras
+using a free software system provided by Debian.  But the ONVIF world
+is full of slightly broken firmware, where the cameras pretend to
+follow the ONVIF specification but fail to set some configuration
+values or refuse to provide video to more than one recipient at the
+time, and the onvif project is quite young and might take a while
+before it completely work with your camera.  Upstream seem eager to
+improve the library, so handling any broken camera might be just <a
+href="https://github.com/sr99622/libonvif/">a bug report away</a>.</p>
+
+<p>The package just cleared NEW, and need a new source only upload
+before it can enter testing.  This will happen in the next few
+days.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="https://people.skolelinux.org/pere/blog/tags/standard">standard</a>, <a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <p style="text-align: right;"><a href="12.rss"><img src="https://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
+    <div id="sidebar">
+      
+
+
+<h2>Archive</h2>
+<ul>
+
+<li>2023
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2023/01/">January (1)</a></li>
+
+</ul></li>
+
+<li>2022
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2021
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/05/">May (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/06/">June (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/07/">July (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2020
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/11/">November (1)</a></li>
+
+</ul></li>
+
+<li>2019
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2018
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2017
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2016
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
+
+</ul></li>
+
+<li>2015
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2014
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
+
+</ul></li>
+
+<li>2013
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2012
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
+
+</ul></li>
+
+<li>2011
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2010
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
+
+</ul></li>
+
+<li>2009
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2008
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
+
+</ul></li>
+
+</ul>
+
+
+
+<h2>Tags</h2>
+<ul>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (19)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (12)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian">debian (185)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/dld">dld (18)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/docbook">docbook (30)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/english">english (441)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/kart">kart (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lego">lego (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (3)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (44)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (13)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/norsk">norsk (320)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/nuug">nuug (198)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (40)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (75)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/personvern">personvern (114)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/robot">robot (17)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (59)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/standard">standard (74)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (14)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (64)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/video">video (77)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
+
+</ul>
+
+
+    </div>
+    <p style="text-align: right">
+ Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
+</p>
+
+  </body>
+</html>
diff --git a/blog/archive/2023/01/01.rss b/blog/archive/2023/01/01.rss
new file mode 100644 (file)
index 0000000..b237e67
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
+       <channel>
+               <title>Petter Reinholdtsen - Entries from January 2023</title>
+               <description>Entries from January 2023</description>
+                <link>https://people.skolelinux.org/pere/blog/</link>
+
+       
+       <item>
+               <title>LinuxCNC MQTT publisher component</title>
+               <link>https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html</link>        
+               <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html</guid>
+                <pubDate>Sun, 8 Jan 2023 19:30:00 +0100</pubDate>
+               <description>&lt;p&gt;I watched &lt;a href=&quot;https://yewtu.be/watch?v=jmKUV3aNLjk&quot;&gt;a 2015
+video from Andreas Schiffler&lt;/a&gt; the other day, where he set up
+&lt;a href=&quot;https://linuxcnc.org/&quot;&gt;LinuxCNC&lt;/a&gt; to send status
+information to the MQTT broker IBM Bluemix.  As I also use MQTT for
+graphing, it occured to me that a generic MQTT LinuxCNC component
+would be useful and I set out to implement it.  Today I got the first
+draft limping along and submitted as
+&lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/pull/2253&quot;&gt;a patch to the
+LinuxCNC project&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;The simple part was setting up the MQTT publishing code in Python.
+I already have set up other parts submitting data to my Mosquito MQTT
+broker, so I could reuse that code.  Writing a LinuxCNC component in
+Python as new to me, but using existing examples in the code
+repository and the extensive documentation, this was fairly straight
+forward.  The hardest part was creating a automated test for the
+component to ensure it was working.  Testing it in a simulated
+LinuxCNC machine proved very useful, as I discovered features I needed
+that I had not thought of yet, and adjusted the code quite a bit to
+make it easier to test without a operational MQTT broker
+available.&lt;/p&gt;
+
+&lt;p&gt;The draft is ready and working, but I am unsure which LinuxCNC HAL
+pins I should collect and publish by default (in other words, the
+default set of information pieces published), and how to get the
+machine name from the LinuxCNC INI file.  The latter is a minor
+detail, but I expect it would be useful in a setup with several
+machines available.  I am hoping for feedback from the experienced
+LinuxCNC developers and users, to make the component even better
+before it can go into the mainland LinuxCNC code base.&lt;/p&gt;
+
+&lt;p&gt;Since I started on the MQTT component, I came across
+&lt;a href=&quot;https://yewtu.be/watch?v=Bqa2grG0XtA&quot;&gt;another video from Kent
+VanderVelden&lt;/a&gt; where he combine LinuxCNC with a set of screen glasses
+controlled by a Raspberry Pi, and it occured to me that it would
+be useful for such use cases if LinuxCNC also provided a REST API for
+querying its status.  I hope to start on such component once the MQTT
+component is working well.&lt;/p&gt;
+&lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+&lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
+</description>
+       </item>
+       
+        </channel>
+</rss>
diff --git a/blog/archive/2023/01/index.html b/blog/archive/2023/01/index.html
new file mode 100644 (file)
index 0000000..a8cc354
--- /dev/null
@@ -0,0 +1,636 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+    <title>Petter Reinholdtsen: entries from January 2023</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/style.css" />
+    <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/vim.css" />
+    <link rel="alternate" title="RSS Feed" href="01.rss" type="application/rss+xml" />
+  </head>
+  <body>
+    <!-- XML FEED -->
+    <div class="title">
+ <h1>
+     <a href="https://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
+     
+ </h1>
+</div>
+
+
+    <h3>Entries from January 2023.</h3>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html">LinuxCNC MQTT publisher component</a>
+      </div>
+      <div class="date">
+         8th January 2023
+      </div>
+      <div class="body">
+        <p>I watched <a href="https://yewtu.be/watch?v=jmKUV3aNLjk">a 2015
+video from Andreas Schiffler</a> the other day, where he set up
+<a href="https://linuxcnc.org/">LinuxCNC</a> to send status
+information to the MQTT broker IBM Bluemix.  As I also use MQTT for
+graphing, it occured to me that a generic MQTT LinuxCNC component
+would be useful and I set out to implement it.  Today I got the first
+draft limping along and submitted as
+<a href="https://github.com/LinuxCNC/linuxcnc/pull/2253">a patch to the
+LinuxCNC project</a>.</p>
+
+<p>The simple part was setting up the MQTT publishing code in Python.
+I already have set up other parts submitting data to my Mosquito MQTT
+broker, so I could reuse that code.  Writing a LinuxCNC component in
+Python as new to me, but using existing examples in the code
+repository and the extensive documentation, this was fairly straight
+forward.  The hardest part was creating a automated test for the
+component to ensure it was working.  Testing it in a simulated
+LinuxCNC machine proved very useful, as I discovered features I needed
+that I had not thought of yet, and adjusted the code quite a bit to
+make it easier to test without a operational MQTT broker
+available.</p>
+
+<p>The draft is ready and working, but I am unsure which LinuxCNC HAL
+pins I should collect and publish by default (in other words, the
+default set of information pieces published), and how to get the
+machine name from the LinuxCNC INI file.  The latter is a minor
+detail, but I expect it would be useful in a setup with several
+machines available.  I am hoping for feedback from the experienced
+LinuxCNC developers and users, to make the component even better
+before it can go into the mainland LinuxCNC code base.</p>
+
+<p>Since I started on the MQTT component, I came across
+<a href="https://yewtu.be/watch?v=Bqa2grG0XtA">another video from Kent
+VanderVelden</a> where he combine LinuxCNC with a set of screen glasses
+controlled by a Raspberry Pi, and it occured to me that it would
+be useful for such use cases if LinuxCNC also provided a REST API for
+querying its status.  I hope to start on such component once the MQTT
+component is working well.</p>
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <p style="text-align: right;"><a href="01.rss"><img src="https://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
+    <div id="sidebar">
+      
+
+
+<h2>Archive</h2>
+<ul>
+
+<li>2023
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2023/01/">January (1)</a></li>
+
+</ul></li>
+
+<li>2022
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2021
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/05/">May (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/06/">June (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/07/">July (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2020
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/11/">November (1)</a></li>
+
+</ul></li>
+
+<li>2019
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2018
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2017
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2016
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
+
+</ul></li>
+
+<li>2015
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2014
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
+
+</ul></li>
+
+<li>2013
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2012
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
+
+</ul></li>
+
+<li>2011
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2010
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
+
+</ul></li>
+
+<li>2009
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2008
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
+
+</ul></li>
+
+</ul>
+
+
+
+<h2>Tags</h2>
+<ul>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (19)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (12)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian">debian (185)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/dld">dld (18)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/docbook">docbook (30)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/english">english (441)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/kart">kart (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lego">lego (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (3)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (44)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (13)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/norsk">norsk (320)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/nuug">nuug (198)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (40)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (75)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/personvern">personvern (114)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/robot">robot (17)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (59)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/standard">standard (74)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (14)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (64)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/video">video (77)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
+
+</ul>
+
+
+    </div>
+    <p style="text-align: right">
+ Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
+</p>
+
+  </body>
+</html>
diff --git a/blog/tags/linuxcnc/index.html b/blog/tags/linuxcnc/index.html
new file mode 100644 (file)
index 0000000..11d5772
--- /dev/null
@@ -0,0 +1,924 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+    <title>Petter Reinholdtsen: Entries Tagged linuxcnc</title>
+    <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/style.css" />
+    <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/vim.css" />
+    <link rel="alternate" title="RSS Feed" href="linuxcnc.rss" type="application/rss+xml" />
+  </head>
+  <body>
+    <div class="title">
+ <h1>
+     <a href="https://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
+     
+ </h1>
+</div>
+
+
+    <h3>Entries tagged "linuxcnc".</h3>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html">LinuxCNC MQTT publisher component</a>
+      </div>
+      <div class="date">
+         8th January 2023
+      </div>
+      <div class="body">
+        <p>I watched <a href="https://yewtu.be/watch?v=jmKUV3aNLjk">a 2015
+video from Andreas Schiffler</a> the other day, where he set up
+<a href="https://linuxcnc.org/">LinuxCNC</a> to send status
+information to the MQTT broker IBM Bluemix.  As I also use MQTT for
+graphing, it occured to me that a generic MQTT LinuxCNC component
+would be useful and I set out to implement it.  Today I got the first
+draft limping along and submitted as
+<a href="https://github.com/LinuxCNC/linuxcnc/pull/2253">a patch to the
+LinuxCNC project</a>.</p>
+
+<p>The simple part was setting up the MQTT publishing code in Python.
+I already have set up other parts submitting data to my Mosquito MQTT
+broker, so I could reuse that code.  Writing a LinuxCNC component in
+Python as new to me, but using existing examples in the code
+repository and the extensive documentation, this was fairly straight
+forward.  The hardest part was creating a automated test for the
+component to ensure it was working.  Testing it in a simulated
+LinuxCNC machine proved very useful, as I discovered features I needed
+that I had not thought of yet, and adjusted the code quite a bit to
+make it easier to test without a operational MQTT broker
+available.</p>
+
+<p>The draft is ready and working, but I am unsure which LinuxCNC HAL
+pins I should collect and publish by default (in other words, the
+default set of information pieces published), and how to get the
+machine name from the LinuxCNC INI file.  The latter is a minor
+detail, but I expect it would be useful in a setup with several
+machines available.  I am hoping for feedback from the experienced
+LinuxCNC developers and users, to make the component even better
+before it can go into the mainland LinuxCNC code base.</p>
+
+<p>Since I started on the MQTT component, I came across
+<a href="https://yewtu.be/watch?v=Bqa2grG0XtA">another video from Kent
+VanderVelden</a> where he combine LinuxCNC with a set of screen glasses
+controlled by a Raspberry Pi, and it occured to me that it would
+be useful for such use cases if LinuxCNC also provided a REST API for
+querying its status.  I hope to start on such component once the MQTT
+component is working well.</p>
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="https://people.skolelinux.org/pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html">Automatic LinuxCNC servo PID tuning?</a>
+      </div>
+      <div class="date">
+        16th July 2022
+      </div>
+      <div class="body">
+        <p>While working on a CNC with servo motors controlled by the
+<a href="https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC</a>
+<a href="https://en.wikipedia.org/wiki/PID_controller">PID
+controller</a>, I recently had to learn how to tune the collection of values
+that control such mathematical machinery that a PID controller is.  It
+proved to be a lot harder than I hoped, and I still have not succeeded
+in getting the Z PID controller to successfully defy gravity, nor X
+and Y to move accurately and reliably.  But while climbing up this
+rather steep learning curve, I discovered that some motor control
+systems are able to tune their PID controllers.  I got the impression
+from the documentation that LinuxCNC were not.  This proved to be not
+true.</p>
+
+<p>The LinuxCNC
+<a href="http://linuxcnc.org/docs/html/man/man9/pid.9.html">pid
+component</a> is the recommended PID controller to use.  It uses eight
+constants <tt>Pgain</tt>, <tt>Igain</tt>, <tt>Dgain</tt>,
+<tt>bias</tt>, <tt>FF0</tt>, <tt>FF1</tt>, <tt>FF2</tt> and
+<tt>FF3</tt> to calculate the output value based on current and wanted
+state, and all of these need to have a sensible value for the
+controller to behave properly.  Note, there are even more values
+involved, theser are just the most important ones.  In my case I need
+the X, Y and Z axes to follow the requested path with little error.
+This has proved quite a challenge for someone who have never tuned a
+PID controller before, but there is at least some help to be found.
+
+<p>I discovered that included in LinuxCNC was this old PID component
+at_pid claiming to have auto tuning capabilities.  Sadly it had been
+neglected since 2011, and could not be used as a plug in replacement
+for the default pid component.  One would have to rewriting the
+LinuxCNC HAL setup to test at_pid.  This was rather sad, when I wanted
+to quickly test auto tuning to see if it did a better job than me at
+figuring out good P, I and D values to use.</p>
+
+<p>I decided to have a look if the situation could be improved.  This
+involved trying to understand the code and history of the pid and
+at_pid components.  Apparently they had a common ancestor, as code
+structure, comments and variable names were quite close to each other.
+Sadly this was not reflected in the git history, making it hard to
+figure out what really happened.  My guess is that the author of
+<a href="https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/at_pid.c">at_pid.c</a>
+took a version of
+<a href="https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/pid.c">pid.c</a>,
+rewrote it to follow the structure he wished pid.c to have, then added
+support for auto tuning and finally got it included into the LinuxCNC
+repository.  The restructuring and lack of early history made it
+harder to figure out which part of the code were relevant to the auto
+tuning, and which part of the code needed to be updated to work the
+same way as the current pid.c implementation.  I started by trying to
+isolate relevant changes in pid.c, and applying them to at_pid.c.  My
+aim was to make sure the at_pid component could replace the pid
+component with a simple change in the HAL setup loadrt line, without
+having to "rewire" the rest of the HAL configuration.  After a few
+hours following this approach, I had learned quite a lot about the
+code structure of both components, while concluding I was heading down
+the wrong rabbit hole, and should get back to the surface and find a
+different path.</p>
+
+<p>For the second attempt, I decided to throw away all the PID control
+related part of the original at_pid.c, and instead isolate and lift
+the auto tuning part of the code and inject it into a copy of pid.c.
+This ensured compatibility with the current pid component, while
+adding auto tuning as a run time option.  To make it easier to identify
+the relevant parts in the future, I wrapped all the auto tuning code
+with '#ifdef AUTO_TUNER'.  The end result behave just like the current
+pid component by default, as that part of the code is identical.  The
+<a href="https://github.com/LinuxCNC/linuxcnc/pull/1820">end result
+entered the LinuxCNC master branch</a> a few days ago.</p>
+
+<p>To enable auto tuning, one need to set a few HAL pins in the PID
+component.  The most important ones are <tt>tune-effort</tt>,
+<tt>tune-mode</tt> and <tt>tune-start</tt>.  But lets take a step
+back, and see what the auto tuning code will do.  I do not know the
+mathematical foundation of the at_pid algorithm, but from observation
+I can tell that the algorithm will, when enabled, produce a square
+wave pattern centered around the <tt>bias</tt> value on the output pin
+of the PID controller.  This can be seen using the HAL Scope provided
+by LinuxCNC.  In my case, this is translated into voltage (+-10V) sent
+to the motor controller, which in turn is translated into motor speed.
+So at_pid will ask the motor to move the axis back and forth.  The
+number of cycles in the pattern is controlled by the
+<tt>tune-cycles</tt> pin, and the extremes of the wave pattern is
+controlled by the <tt>tune-effort</tt> pin.  Of course, trying to
+change the direction of a physical object instantly (as in going
+directly from a positive voltage to the equivalent negative voltage)
+do not change velocity instantly, and it take some time for the object
+to slow down and move in the opposite direction.  This result in a
+more smooth movement wave form, as the axis in question were vibrating
+back and forth.  When the axis reached the target speed in the
+opposing direction, the auto tuner change direction again.  After
+several of these changes, the average time delay between the 'peaks'
+and 'valleys' of this movement graph is then used to calculate
+proposed values for Pgain, Igain and Dgain, and insert them into the
+HAL model to use by the pid controller.  The auto tuned settings are
+not great, but htye work a lot better than the values I had been able
+to cook up on my own, at least for the horizontal X and Y axis.  But I
+had to use very small <tt>tune-effort<tt> values, as my motor
+controllers error out if the voltage change too quickly.  I've been
+less lucky with the Z axis, which is moving a heavy object up and
+down, and seem to confuse the algorithm.  The Z axis movement became a
+lot better when I introduced a <tt>bias</tt> value to counter the
+gravitational drag, but I will have to work a lot more on the Z axis
+PID values.</p>
+
+<p>Armed with this knowledge, it is time to look at how to do the
+tuning.  Lets say the HAL configuration in question load the PID
+component for X, Y and Z like this:</p>
+<blockquote><pre>
+loadrt pid names=pid.x,pid.y,pid.z
+</pre></blockquote>
+
+<p>Armed with the new and improved at_pid component, the new line will
+look like this:</p>
+
+<blockquote><pre>
+loadrt at_pid names=pid.x,pid.y,pid.z
+</pre></blockquote>
+
+<p>The rest of the HAL setup can stay the same.  This work because the
+components are referenced by name.  If the component had used count=3
+instead, all use of pid.# had to be changed to at_pid.#.</p>
+
+<p>To start tuning the X axis, move the axis to the middle of its
+range, to make sure it do not hit anything when it start moving back
+and forth.  Next, set the <tt>tune-effort</tt> to a low number in the
+output range.  I used 0.1 as my initial value.  Next, assign 1 to the
+<tt>tune-mode</tt> value. Note, this will disable the pid controlling
+part and feed 0 to the output pin, which in my case initially caused a
+lot of drift.  In my case it proved to be a good idea with X and Y to
+tune the motor driver to make sure 0 voltage stopped the motor
+rotation.  On the other hand, for the Z axis this proved to be a bad
+idea, so it will depend on your setup.  It might help to set the
+<tt>bias</tt> value to a output value that reduce or eliminate the
+axis drift.  Finally, after setting <tt>tune-mode</tt>, set
+<tt>tune-start</tt> to 1 to activate the auto tuning.  If all go well,
+your axis will vibrate for a few seconds and when it is done, new
+values for Pgain, Igain and Dgain will be active.  To test them,
+change <tt>tune-mode</tt> back to 0.  Note that this might cause the
+machine to suddenly jerk as it bring the axis back to its commanded
+position, which it might have drifted away from during tuning.  To
+summarize with some halcmd lines:</p>
+
+<blockquote><pre>
+setp pid.x.tune-effort 0.1
+setp pid.x.tune-mode 1
+setp pid.x.tune-start 1
+# wait for the tuning to complete
+setp pid.x.tune-mode 0
+</pre></blockquote>
+
+<p>After doing this task quite a few times while trying to figure out
+how to properly tune the PID controllers on the machine in, I decided
+to figure out if this process could be automated, and wrote a script
+to do the entire tuning process from power on.  The end result will
+ensure the machine is powered on and ready to run, home all axis if it
+is not already done, check that the extra tuning pins are available,
+move the axis to its mid point, run the auto tuning and re-enable the
+pid controller when it is done.  It can be run several times.  Check
+out the
+<a href="https://github.com/SebKuzminsky/MazakVQC1540/blob/bon-dev/scripts/run-auto-pid-tuner">run-auto-pid-tuner</a>
+script on github if you want to learn how it is done.</p>
+
+<p>My hope is that this little adventure can inspire someone who know
+more about motor PID controller tuning can implement even better
+algorithms for automatic PID tuning in LinuxCNC, making life easier
+for both me and all the others that want to use LinuxCNC but lack the
+in depth knowledge needed to tune PID controllers well.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="https://people.skolelinux.org/pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html">LinuxCNC translators life just got a bit easier</a>
+      </div>
+      <div class="date">
+         3rd June 2022
+      </div>
+      <div class="body">
+        <p>Back in oktober last year, when I started looking at the
+<a href="https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC</a> system, I
+proposed to change the documentation build system make life easier for
+translators.  The original system consisted of independently written
+documentation files for each language, with no automated way to track
+changes done in other translations and no help for the translators to
+know how much was left to translated.  By using
+<a href="https://po4a.org/">the po4a system</a> to generate POT and PO
+files from the English documentation, this can be improved.  A small
+team of LinuxCNC contributors got together and today our labour
+finally payed off.  Since a few hours ago, it is now possible to
+translate <a href="https://hosted.weblate.org/projects/linuxcnc/">the
+LinuxCNC documentation on Weblate</a>, alongside the program itself.</p>
+
+<p>The effort to migrate the documentation to use po4a has been both
+slow and frustrating.  I am very happy we finally made it.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <div class="title">
+        <a href="https://people.skolelinux.org/pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html">Run your industrial metal working machine using Debian?</a>
+      </div>
+      <div class="date">
+         2nd March 2022
+      </div>
+      <div class="body">
+        <p>After many months of hard work by the good people involved in
+<a href="https://en.wikipedia.org/wiki/LinuxCNC">LinuxCNC</a>, the
+system was accepted Sunday
+<a href="https://tracker.debian.org/pkg/linuxcnc">into Debian</a>.
+Once it was available from Debian, I was surprised to discover from
+<a href="https://qa.debian.org/popcon.php?package=linuxcnc">its
+popularity-contest numbers</a> that people have been reporting its use
+since 2012.  <a href="http://linuxcnc.org/">Its project site</a> might
+be a good place to check out, but sadly is not working when visiting
+via Tor.</p>
+
+<p>But what is LinuxCNC, you are probably wondering?  Perhaps a
+Wikipedia quote is in place?</p>
+
+<blockquote>
+"LinuxCNC is a software system for numerical control of
+machines such as milling machines, lathes, plasma cutters, routers,
+cutting machines, robots and hexapods. It can control up to 9 axes or
+joints of a CNC machine using G-code (RS-274NGC) as input. It has
+several GUIs suited to specific kinds of usage (touch screen,
+interactive development)."
+</blockquote>
+
+<p>It can even control 3D printers.  And even though the Wikipedia
+page indicate that it can only work with hard real time kernel
+features, it can also work with the user space soft real time features
+provided by the Debian kernel.
+<a href="https://github.com/linuxcnc/linuxcnc">The source code</a> is
+available from Github.  The last few months I've been involved in the
+translation setup for the program and documentation.  Translators are
+most welcome to
+<a href="https://hosted.weblate.org/engage/linuxcnc/">join the
+effort</a> using Weblate.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+
+      </div>
+      <div class="tags">
+        
+        
+        Tags: <a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer</a>, <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <p style="text-align: right;"><a href="linuxcnc.rss"><img src="https://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
+    <div id="sidebar">
+      
+
+
+<h2>Archive</h2>
+<ul>
+
+<li>2023
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2023/01/">January (1)</a></li>
+
+</ul></li>
+
+<li>2022
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2022/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2021
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/05/">May (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/06/">June (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/07/">July (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2021/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2020
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/10/">October (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2020/11/">November (1)</a></li>
+
+</ul></li>
+
+<li>2019
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2018
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2017
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
+
+</ul></li>
+
+<li>2016
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
+
+</ul></li>
+
+<li>2015
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2014
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
+
+</ul></li>
+
+<li>2013
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2012
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
+
+</ul></li>
+
+<li>2011
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
+
+</ul></li>
+
+<li>2010
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
+
+</ul></li>
+
+<li>2009
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
+
+</ul></li>
+
+<li>2008
+<ul>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
+
+<li><a href="https://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
+
+</ul></li>
+
+</ul>
+
+
+
+<h2>Tags</h2>
+<ul>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (19)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (12)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian">debian (185)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/dld">dld (18)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/docbook">docbook (30)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/english">english (441)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/kart">kart (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lego">lego (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (3)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (44)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (13)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (23)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/norsk">norsk (320)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/nuug">nuug (198)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (40)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (75)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/personvern">personvern (114)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/robot">robot (17)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (59)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/standard">standard (74)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (14)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (64)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (20)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/video">video (77)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
+
+ <li><a href="https://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
+
+</ul>
+
+
+    </div>
+    <p style="text-align: right">
+ Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
+</p>
+
+  </body>
+</html>
diff --git a/blog/tags/linuxcnc/linuxcnc.rss b/blog/tags/linuxcnc/linuxcnc.rss
new file mode 100644 (file)
index 0000000..d3807b5
--- /dev/null
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/'>
+       <channel>
+               <title>Petter Reinholdtsen - Entries tagged linuxcnc</title>
+               <description>Entries tagged linuxcnc</description>
+                <link>https://people.skolelinux.org/pere/blog/</link>
+
+       
+       <item>
+               <title>LinuxCNC MQTT publisher component</title>
+               <link>https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html</link>
+               <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html</guid>
+                <pubDate>Sun, 8 Jan 2023 19:30:00 +0100</pubDate>
+               <description>&lt;p&gt;I watched &lt;a href=&quot;https://yewtu.be/watch?v=jmKUV3aNLjk&quot;&gt;a 2015
+video from Andreas Schiffler&lt;/a&gt; the other day, where he set up
+&lt;a href=&quot;https://linuxcnc.org/&quot;&gt;LinuxCNC&lt;/a&gt; to send status
+information to the MQTT broker IBM Bluemix.  As I also use MQTT for
+graphing, it occured to me that a generic MQTT LinuxCNC component
+would be useful and I set out to implement it.  Today I got the first
+draft limping along and submitted as
+&lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/pull/2253&quot;&gt;a patch to the
+LinuxCNC project&lt;/a&gt;.&lt;/p&gt;
+
+&lt;p&gt;The simple part was setting up the MQTT publishing code in Python.
+I already have set up other parts submitting data to my Mosquito MQTT
+broker, so I could reuse that code.  Writing a LinuxCNC component in
+Python as new to me, but using existing examples in the code
+repository and the extensive documentation, this was fairly straight
+forward.  The hardest part was creating a automated test for the
+component to ensure it was working.  Testing it in a simulated
+LinuxCNC machine proved very useful, as I discovered features I needed
+that I had not thought of yet, and adjusted the code quite a bit to
+make it easier to test without a operational MQTT broker
+available.&lt;/p&gt;
+
+&lt;p&gt;The draft is ready and working, but I am unsure which LinuxCNC HAL
+pins I should collect and publish by default (in other words, the
+default set of information pieces published), and how to get the
+machine name from the LinuxCNC INI file.  The latter is a minor
+detail, but I expect it would be useful in a setup with several
+machines available.  I am hoping for feedback from the experienced
+LinuxCNC developers and users, to make the component even better
+before it can go into the mainland LinuxCNC code base.&lt;/p&gt;
+
+&lt;p&gt;Since I started on the MQTT component, I came across
+&lt;a href=&quot;https://yewtu.be/watch?v=Bqa2grG0XtA&quot;&gt;another video from Kent
+VanderVelden&lt;/a&gt; where he combine LinuxCNC with a set of screen glasses
+controlled by a Raspberry Pi, and it occured to me that it would
+be useful for such use cases if LinuxCNC also provided a REST API for
+querying its status.  I hope to start on such component once the MQTT
+component is working well.&lt;/p&gt;
+&lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+&lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
+</description>
+       </item>
+       
+       <item>
+               <title>Automatic LinuxCNC servo PID tuning?</title>
+               <link>https://people.skolelinux.org/pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html</link>
+               <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/Automatic_LinuxCNC_servo_PID_tuning_.html</guid>
+                <pubDate>Sat, 16 Jul 2022 22:30:00 +0200</pubDate>
+               <description>&lt;p&gt;While working on a CNC with servo motors controlled by the
+&lt;a href=&quot;https://en.wikipedia.org/wiki/LinuxCNC&quot;&gt;LinuxCNC&lt;/a&gt;
+&lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot;&gt;PID
+controller&lt;/a&gt;, I recently had to learn how to tune the collection of values
+that control such mathematical machinery that a PID controller is.  It
+proved to be a lot harder than I hoped, and I still have not succeeded
+in getting the Z PID controller to successfully defy gravity, nor X
+and Y to move accurately and reliably.  But while climbing up this
+rather steep learning curve, I discovered that some motor control
+systems are able to tune their PID controllers.  I got the impression
+from the documentation that LinuxCNC were not.  This proved to be not
+true.&lt;/p&gt;
+
+&lt;p&gt;The LinuxCNC
+&lt;a href=&quot;http://linuxcnc.org/docs/html/man/man9/pid.9.html&quot;&gt;pid
+component&lt;/a&gt; is the recommended PID controller to use.  It uses eight
+constants &lt;tt&gt;Pgain&lt;/tt&gt;, &lt;tt&gt;Igain&lt;/tt&gt;, &lt;tt&gt;Dgain&lt;/tt&gt;,
+&lt;tt&gt;bias&lt;/tt&gt;, &lt;tt&gt;FF0&lt;/tt&gt;, &lt;tt&gt;FF1&lt;/tt&gt;, &lt;tt&gt;FF2&lt;/tt&gt; and
+&lt;tt&gt;FF3&lt;/tt&gt; to calculate the output value based on current and wanted
+state, and all of these need to have a sensible value for the
+controller to behave properly.  Note, there are even more values
+involved, theser are just the most important ones.  In my case I need
+the X, Y and Z axes to follow the requested path with little error.
+This has proved quite a challenge for someone who have never tuned a
+PID controller before, but there is at least some help to be found.
+
+&lt;p&gt;I discovered that included in LinuxCNC was this old PID component
+at_pid claiming to have auto tuning capabilities.  Sadly it had been
+neglected since 2011, and could not be used as a plug in replacement
+for the default pid component.  One would have to rewriting the
+LinuxCNC HAL setup to test at_pid.  This was rather sad, when I wanted
+to quickly test auto tuning to see if it did a better job than me at
+figuring out good P, I and D values to use.&lt;/p&gt;
+
+&lt;p&gt;I decided to have a look if the situation could be improved.  This
+involved trying to understand the code and history of the pid and
+at_pid components.  Apparently they had a common ancestor, as code
+structure, comments and variable names were quite close to each other.
+Sadly this was not reflected in the git history, making it hard to
+figure out what really happened.  My guess is that the author of
+&lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/at_pid.c&quot;&gt;at_pid.c&lt;/a&gt;
+took a version of
+&lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/blob/master/src/hal/components/pid.c&quot;&gt;pid.c&lt;/a&gt;,
+rewrote it to follow the structure he wished pid.c to have, then added
+support for auto tuning and finally got it included into the LinuxCNC
+repository.  The restructuring and lack of early history made it
+harder to figure out which part of the code were relevant to the auto
+tuning, and which part of the code needed to be updated to work the
+same way as the current pid.c implementation.  I started by trying to
+isolate relevant changes in pid.c, and applying them to at_pid.c.  My
+aim was to make sure the at_pid component could replace the pid
+component with a simple change in the HAL setup loadrt line, without
+having to &quot;rewire&quot; the rest of the HAL configuration.  After a few
+hours following this approach, I had learned quite a lot about the
+code structure of both components, while concluding I was heading down
+the wrong rabbit hole, and should get back to the surface and find a
+different path.&lt;/p&gt;
+
+&lt;p&gt;For the second attempt, I decided to throw away all the PID control
+related part of the original at_pid.c, and instead isolate and lift
+the auto tuning part of the code and inject it into a copy of pid.c.
+This ensured compatibility with the current pid component, while
+adding auto tuning as a run time option.  To make it easier to identify
+the relevant parts in the future, I wrapped all the auto tuning code
+with &#39;#ifdef AUTO_TUNER&#39;.  The end result behave just like the current
+pid component by default, as that part of the code is identical.  The
+&lt;a href=&quot;https://github.com/LinuxCNC/linuxcnc/pull/1820&quot;&gt;end result
+entered the LinuxCNC master branch&lt;/a&gt; a few days ago.&lt;/p&gt;
+
+&lt;p&gt;To enable auto tuning, one need to set a few HAL pins in the PID
+component.  The most important ones are &lt;tt&gt;tune-effort&lt;/tt&gt;,
+&lt;tt&gt;tune-mode&lt;/tt&gt; and &lt;tt&gt;tune-start&lt;/tt&gt;.  But lets take a step
+back, and see what the auto tuning code will do.  I do not know the
+mathematical foundation of the at_pid algorithm, but from observation
+I can tell that the algorithm will, when enabled, produce a square
+wave pattern centered around the &lt;tt&gt;bias&lt;/tt&gt; value on the output pin
+of the PID controller.  This can be seen using the HAL Scope provided
+by LinuxCNC.  In my case, this is translated into voltage (+-10V) sent
+to the motor controller, which in turn is translated into motor speed.
+So at_pid will ask the motor to move the axis back and forth.  The
+number of cycles in the pattern is controlled by the
+&lt;tt&gt;tune-cycles&lt;/tt&gt; pin, and the extremes of the wave pattern is
+controlled by the &lt;tt&gt;tune-effort&lt;/tt&gt; pin.  Of course, trying to
+change the direction of a physical object instantly (as in going
+directly from a positive voltage to the equivalent negative voltage)
+do not change velocity instantly, and it take some time for the object
+to slow down and move in the opposite direction.  This result in a
+more smooth movement wave form, as the axis in question were vibrating
+back and forth.  When the axis reached the target speed in the
+opposing direction, the auto tuner change direction again.  After
+several of these changes, the average time delay between the &#39;peaks&#39;
+and &#39;valleys&#39; of this movement graph is then used to calculate
+proposed values for Pgain, Igain and Dgain, and insert them into the
+HAL model to use by the pid controller.  The auto tuned settings are
+not great, but htye work a lot better than the values I had been able
+to cook up on my own, at least for the horizontal X and Y axis.  But I
+had to use very small &lt;tt&gt;tune-effort&lt;tt&gt; values, as my motor
+controllers error out if the voltage change too quickly.  I&#39;ve been
+less lucky with the Z axis, which is moving a heavy object up and
+down, and seem to confuse the algorithm.  The Z axis movement became a
+lot better when I introduced a &lt;tt&gt;bias&lt;/tt&gt; value to counter the
+gravitational drag, but I will have to work a lot more on the Z axis
+PID values.&lt;/p&gt;
+
+&lt;p&gt;Armed with this knowledge, it is time to look at how to do the
+tuning.  Lets say the HAL configuration in question load the PID
+component for X, Y and Z like this:&lt;/p&gt;
+&lt;blockquote&gt;&lt;pre&gt;
+loadrt pid names=pid.x,pid.y,pid.z
+&lt;/pre&gt;&lt;/blockquote&gt;
+
+&lt;p&gt;Armed with the new and improved at_pid component, the new line will
+look like this:&lt;/p&gt;
+
+&lt;blockquote&gt;&lt;pre&gt;
+loadrt at_pid names=pid.x,pid.y,pid.z
+&lt;/pre&gt;&lt;/blockquote&gt;
+
+&lt;p&gt;The rest of the HAL setup can stay the same.  This work because the
+components are referenced by name.  If the component had used count=3
+instead, all use of pid.# had to be changed to at_pid.#.&lt;/p&gt;
+
+&lt;p&gt;To start tuning the X axis, move the axis to the middle of its
+range, to make sure it do not hit anything when it start moving back
+and forth.  Next, set the &lt;tt&gt;tune-effort&lt;/tt&gt; to a low number in the
+output range.  I used 0.1 as my initial value.  Next, assign 1 to the
+&lt;tt&gt;tune-mode&lt;/tt&gt; value. Note, this will disable the pid controlling
+part and feed 0 to the output pin, which in my case initially caused a
+lot of drift.  In my case it proved to be a good idea with X and Y to
+tune the motor driver to make sure 0 voltage stopped the motor
+rotation.  On the other hand, for the Z axis this proved to be a bad
+idea, so it will depend on your setup.  It might help to set the
+&lt;tt&gt;bias&lt;/tt&gt; value to a output value that reduce or eliminate the
+axis drift.  Finally, after setting &lt;tt&gt;tune-mode&lt;/tt&gt;, set
+&lt;tt&gt;tune-start&lt;/tt&gt; to 1 to activate the auto tuning.  If all go well,
+your axis will vibrate for a few seconds and when it is done, new
+values for Pgain, Igain and Dgain will be active.  To test them,
+change &lt;tt&gt;tune-mode&lt;/tt&gt; back to 0.  Note that this might cause the
+machine to suddenly jerk as it bring the axis back to its commanded
+position, which it might have drifted away from during tuning.  To
+summarize with some halcmd lines:&lt;/p&gt;
+
+&lt;blockquote&gt;&lt;pre&gt;
+setp pid.x.tune-effort 0.1
+setp pid.x.tune-mode 1
+setp pid.x.tune-start 1
+# wait for the tuning to complete
+setp pid.x.tune-mode 0
+&lt;/pre&gt;&lt;/blockquote&gt;
+
+&lt;p&gt;After doing this task quite a few times while trying to figure out
+how to properly tune the PID controllers on the machine in, I decided
+to figure out if this process could be automated, and wrote a script
+to do the entire tuning process from power on.  The end result will
+ensure the machine is powered on and ready to run, home all axis if it
+is not already done, check that the extra tuning pins are available,
+move the axis to its mid point, run the auto tuning and re-enable the
+pid controller when it is done.  It can be run several times.  Check
+out the
+&lt;a href=&quot;https://github.com/SebKuzminsky/MazakVQC1540/blob/bon-dev/scripts/run-auto-pid-tuner&quot;&gt;run-auto-pid-tuner&lt;/a&gt;
+script on github if you want to learn how it is done.&lt;/p&gt;
+
+&lt;p&gt;My hope is that this little adventure can inspire someone who know
+more about motor PID controller tuning can implement even better
+algorithms for automatic PID tuning in LinuxCNC, making life easier
+for both me and all the others that want to use LinuxCNC but lack the
+in depth knowledge needed to tune PID controllers well.&lt;/p&gt;
+
+&lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+&lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
+</description>
+       </item>
+       
+       <item>
+               <title>LinuxCNC translators life just got a bit easier</title>
+               <link>https://people.skolelinux.org/pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html</link>
+               <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/LinuxCNC_translators_life_just_got_a_bit_easier.html</guid>
+                <pubDate>Fri, 3 Jun 2022 21:10:00 +0200</pubDate>
+               <description>&lt;p&gt;Back in oktober last year, when I started looking at the
+&lt;a href=&quot;https://en.wikipedia.org/wiki/LinuxCNC&quot;&gt;LinuxCNC&lt;/a&gt; system, I
+proposed to change the documentation build system make life easier for
+translators.  The original system consisted of independently written
+documentation files for each language, with no automated way to track
+changes done in other translations and no help for the translators to
+know how much was left to translated.  By using
+&lt;a href=&quot;https://po4a.org/&quot;&gt;the po4a system&lt;/a&gt; to generate POT and PO
+files from the English documentation, this can be improved.  A small
+team of LinuxCNC contributors got together and today our labour
+finally payed off.  Since a few hours ago, it is now possible to
+translate &lt;a href=&quot;https://hosted.weblate.org/projects/linuxcnc/&quot;&gt;the
+LinuxCNC documentation on Weblate&lt;/a&gt;, alongside the program itself.&lt;/p&gt;
+
+&lt;p&gt;The effort to migrate the documentation to use po4a has been both
+slow and frustrating.  I am very happy we finally made it.&lt;/p&gt;
+
+&lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+&lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
+</description>
+       </item>
+       
+       <item>
+               <title>Run your industrial metal working machine using Debian?</title>
+               <link>https://people.skolelinux.org/pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html</link>
+               <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/Run_your_industrial_metal_working_machine_using_Debian_.html</guid>
+                <pubDate>Wed, 2 Mar 2022 18:40:00 +0100</pubDate>
+               <description>&lt;p&gt;After many months of hard work by the good people involved in
+&lt;a href=&quot;https://en.wikipedia.org/wiki/LinuxCNC&quot;&gt;LinuxCNC&lt;/a&gt;, the
+system was accepted Sunday
+&lt;a href=&quot;https://tracker.debian.org/pkg/linuxcnc&quot;&gt;into Debian&lt;/a&gt;.
+Once it was available from Debian, I was surprised to discover from
+&lt;a href=&quot;https://qa.debian.org/popcon.php?package=linuxcnc&quot;&gt;its
+popularity-contest numbers&lt;/a&gt; that people have been reporting its use
+since 2012.  &lt;a href=&quot;http://linuxcnc.org/&quot;&gt;Its project site&lt;/a&gt; might
+be a good place to check out, but sadly is not working when visiting
+via Tor.&lt;/p&gt;
+
+&lt;p&gt;But what is LinuxCNC, you are probably wondering?  Perhaps a
+Wikipedia quote is in place?&lt;/p&gt;
+
+&lt;blockquote&gt;
+&quot;LinuxCNC is a software system for numerical control of
+machines such as milling machines, lathes, plasma cutters, routers,
+cutting machines, robots and hexapods. It can control up to 9 axes or
+joints of a CNC machine using G-code (RS-274NGC) as input. It has
+several GUIs suited to specific kinds of usage (touch screen,
+interactive development).&quot;
+&lt;/blockquote&gt;
+
+&lt;p&gt;It can even control 3D printers.  And even though the Wikipedia
+page indicate that it can only work with hard real time kernel
+features, it can also work with the user space soft real time features
+provided by the Debian kernel.
+&lt;a href=&quot;https://github.com/linuxcnc/linuxcnc&quot;&gt;The source code&lt;/a&gt; is
+available from Github.  The last few months I&#39;ve been involved in the
+translation setup for the program and documentation.  Translators are
+most welcome to
+&lt;a href=&quot;https://hosted.weblate.org/engage/linuxcnc/&quot;&gt;join the
+effort&lt;/a&gt; using Weblate.&lt;/p&gt;
+
+&lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+&lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
+</description>
+       </item>
+       
+        </channel>
+</rss>