Analogwerte in ioBroker einlesen und verarbeiten

Analogwerte in ioBroker einlesen und verarbeiten

Die folgene Anleitung beschreibt die Einbindung des 4-Kanal-Analog-Eingangsmoduls in ioBroker. Das zugehörige Script, welches einfach in den Javascript-Adapter hineinkopiert wird, legt dabei selbstständig die zugehörigen Objekte/Datenpunkte an. Diese können dann in anderen Scripten oder mit anderen Adaptern weiterverarbeitet werden. Dabei sind Bus und Aktualisierungszeit der Werte frei einstellbar. Das Script ist auf allen Single-Board-Computern nutzbar, welche einen SPI-Bus bereitstellen.

Als erstes muss der SPI-Bus aktiviert werden. Dazu benutzen die meisten Singleboard-Computer ein Konfigurationsprogramm, welches in der Konsole aufgerufen wird (Raspberry Pi > "sudo raspi-config", Tinker Board > "sudo tinker-config").

Anschließend wird in der Admin-Oberfläche von ioBroker im Browser die Konfiguration des Javascript-Adapters aufgerufen (Reiter "Instanzen" > Klick auf den Button mit dem Mutterschlüssel in der Zeile des JS-Adapters).

Dort wird in der Zeile "weitere Node-Module" das Modul "mcp-spi-adc" hinzugefügt und anschließend gespeichert. Der JS-Adapter startet daraufhin neu und installiert das eben eingetragene Modul.

js-adapter

 

Jetzt können wir in den Reiter "Scripte" wechseln und ein neues Blockly-Script erzeugen:

neues-script

 

Dieses können wir unseren Wünschen entsprechend dann umbenennen:

script-umbenennen

 

Jetzt können wir schon das vorbereitete Script importieren, in dem wir auf den entsprechenden Button klicken:

script-importieren

Kopieren Sie jetzt den folgenden Code aus dem Kasten und fügen Sie ihn in das angezeigte Fenster ein. Drücken Sie danach unten rechts im Fenster "OK".

 <xml xmlns="http://www.w3.org/1999/xhtml">
  <block type="procedures_defcustomnoreturn" id="+Mw]Y2?.93oBf(ge{jt~" x="113" y="63">
    <mutation statements="false">
      <arg name="busNumber"></arg>
      <arg name="deviceNumber"></arg>
      <arg name="Interval"></arg>
    </mutation>
    <field name="NAME">Read_4AI_Modul</field>
    <field name="SCRIPT">Y3JlYXRlU3RhdGUoJ0FuYWxvZ21vZHVsLkNoYW5uZWwwJywwLHJlYWQxKTsKY3JlYXRlU3RhdGUoJ0FuYWxvZ21vZHVsLkNoYW5uZWwxJywwLHJlYWQyKTsKY3JlYXRlU3RhdGUoJ0FuYWxvZ21vZHVsLkNoYW5uZWwyJywwLHJlYWQzKTsKY3JlYXRlU3RhdGUoJ0FuYWxvZ21vZHVsLkNoYW5uZWwzJywwLHJlYWQ0KTsKCmNvbnN0IG1jcGFkYyA9IHJlcXVpcmUoJ21jcC1zcGktYWRjJyk7CgoKCmZ1bmN0aW9uIHJlYWQxKCl7CmNvbnN0IGlucHV0MSA9IG1jcGFkYy5vcGVuTWNwMzIwNCgwLCB7YnVzTnVtYmVyOiBidXNOdW1iZXIsIGRldmljZU51bWJlcjpkZXZpY2VOdW1iZXIsICBzcGVlZEh6OiAyMDAwMH0sIChlcnIpID0+IHsKICBpZiAoZXJyKSB0aHJvdyBlcnI7CgogIHNldEludGVydmFsKCgpID0+IHsKICAgIGlucHV0MS5yZWFkKChlcnIsIHJlYWRpbmcpID0+IHsKICAgICAgaWYgKGVycikgdGhyb3cgZXJyOwoKICAgICAgc2V0U3RhdGUoIkFuYWxvZ21vZHVsLkNoYW5uZWwwIiwocmVhZGluZy5yYXdWYWx1ZSkpLHRydWU7CiAgICB9KTsKICB9LCBJbnRlcnZhbCk7Cn0pOwp9CgpmdW5jdGlvbiByZWFkMigpewpjb25zdCBpbnB1dDIgPSBtY3BhZGMub3Blbk1jcDMyMDQoMSwge2J1c051bWJlcjogYnVzTnVtYmVyLCBkZXZpY2VOdW1iZXI6ZGV2aWNlTnVtYmVyLCAgc3BlZWRIejogMjAwMDB9LCAoZXJyKSA9PiB7CiAgaWYgKGVycikgdGhyb3cgZXJyOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBpbnB1dDIucmVhZCgoZXJyLCByZWFkaW5nKSA9PiB7CiAgICAgIGlmIChlcnIpIHRocm93IGVycjsKCiAgICAgIHNldFN0YXRlKCJBbmFsb2dtb2R1bC5DaGFubmVsMSIsKHJlYWRpbmcucmF3VmFsdWUpKSx0cnVlOwogICAgfSk7CiAgfSwgSW50ZXJ2YWwpOwp9KTsKfQoKZnVuY3Rpb24gcmVhZDMoKXsKY29uc3QgaW5wdXQzID0gbWNwYWRjLm9wZW5NY3AzMjA0KDIsIHtidXNOdW1iZXI6IGJ1c051bWJlciwgZGV2aWNlTnVtYmVyOmRldmljZU51bWJlciwgIHNwZWVkSHo6IDIwMDAwfSwgKGVycikgPT4gewogIGlmIChlcnIpIHRocm93IGVycjsKCiAgc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgaW5wdXQzLnJlYWQoKGVyciwgcmVhZGluZykgPT4gewogICAgICBpZiAoZXJyKSB0aHJvdyBlcnI7CgogICAgICBzZXRTdGF0ZSgiQW5hbG9nbW9kdWwuQ2hhbm5lbDIiLChyZWFkaW5nLnJhd1ZhbHVlKSksdHJ1ZTsKICAgIH0pOwogIH0sIEludGVydmFsKTsKfSk7Cn0KCmZ1bmN0aW9uIHJlYWQ0KCl7CmNvbnN0IGlucHV0NCA9IG1jcGFkYy5vcGVuTWNwMzIwNCgzLCB7YnVzTnVtYmVyOiBidXNOdW1iZXIsIGRldmljZU51bWJlcjpkZXZpY2VOdW1iZXIsICBzcGVlZEh6OiAyMDAwMH0sIChlcnIpID0+IHsKICBpZiAoZXJyKSB0aHJvdyBlcnI7CgogIHNldEludGVydmFsKCgpID0+IHsKICAgIGlucHV0NC5yZWFkKChlcnIsIHJlYWRpbmcpID0+IHsKICAgICAgaWYgKGVycikgdGhyb3cgZXJyOwoKICAgICAgc2V0U3RhdGUoIkFuYWxvZ21vZHVsLkNoYW5uZWwzIiwocmVhZGluZy5yYXdWYWx1ZSkpLHRydWU7CiAgICB9KTsKICB9LCBJbnRlcnZhbCk7Cn0pOwp9CgoK</field>
    <comment pinned="false" h="80" w="160">Liest die Werte des 4-Kanal-Analogmoduls.
busNumber &gt; Nr. des SPI-Busses (RasPi 1= 0, RasPi2/3=1, Tinker Board=2
deviceNumber &gt; genutzte CS-Leitung (0 oder1)
    </comment>
  </block>
  <block type="procedures_callcustomnoreturn" id="-vA)=,47jm|xOTu0RiVL" x="113" y="113">
    <mutation name="Read_4AI_Modul">
      <arg name="busNumber"></arg>
      <arg name="deviceNumber"></arg>
      <arg name="Interval"></arg>
    </mutation>
    <value name="ARG0">
      <block type="math_number" id="WyP!BzAW=l|c9CGnp16C">
        <field name="NUM">2</field>
      </block>
    </value>
    <value name="ARG1">
      <block type="math_number" id="5T0mmPWZx62Y}FGh,:b]">
        <field name="NUM">1</field>
      </block>
    </value>
    <value name="ARG2">
      <block type="math_number" id="`aS~(w8[IA,QtW-P+0V7">
        <field name="NUM">250</field>
      </block>
    </value>
  </block>
</xml>

Das Ergebnis ist dann das folgende Script:

Script-Blockly

  • Die blauen Werte können dabei an den verwendeten SBC und die eigenen Bedürfnisse angepasst werden:
  • busNumber: kennzeichnet die Nummer des SPI-Busses (RasPi2/3 = 1, Tinker Board = 2)
  • deviceNumber: bezeichnet den verwendeten CS-Anschluss (kann normalerweise nur 0 oder 1 sein, bei der RasPiLC-Platine immer 1)
  • Interval: Abtastintervall, alle wieviele Millisekunden ein neuer Wert eingelesen wird

Danach muss das Script nur noch mit Klick auf das Symbol mit dem Dreieck gestartet werden. Die Datenpunkte sind danach sofort im Reiter "Objekte" unterhalb des javascript-Adapters zu sehen und können genutzt werden:

objekte-4ch-analog-in-modul

Die Werte der einzelnen Kanäle stellen die Rohwerte dar. Der verwendete MCP3204 besitzt eine Auflösung von 12bit. Das bedeutet, das die Werte in einem einen Bereich von 4096 Schritten annehmen können (0-4095).

Bei einer Eingangsspannung von beispielsweise 2,5V und der internen Referenzspannung von 5V beträgt die Ausgabe dementsprechend 4096 / 5V * 2,5V = 2048.

Sollten Sie eine andere Skalierung benötigen, müssen die Werte entsprechend umgerechnet werden.