Umfangreiche Sensordaten uebertragen

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Umfangreiche Sensordaten uebertragen

Beitrag von HMSteve » 23.01.2022, 20:46

Guten Abend allerseits,

leider komme ich bei dem Versuch, 20 bytes an Messdaten zzgl. 3 bytes fuer Temperatur/Feuchte von einem Sensor an die CCU zu uebertragen und in einem Kanal darzustellen, nicht weiter. Der Sensor ist an die CCU angelernt und die Geraeteconfig in Kanal 0 laesst sich von dort aendern. Die vom Sensor ueber die serielle Schnittstelle ausgegebenen Telegramme werden ebenso wie die ACKs der CCU auch im Analyzer sichtbar, am Funk liegt es also wohl nicht. Dennoch landen keine Daten auf der CCU:
pm.JPG

Ausschnitt aus dem xml:

Code: Alles auswählen

    <channel index="1" type="HBWEATHER" autoregister="true">
      <link_roles>
        <source name="WEATHER_TH" />
      </link_roles>
      <paramset type="MASTER" id="HB-UNI-Sen-PM_master" />
      <paramset type="VALUES" id="HB-UNI-Sen-PM_values">
        <parameter id="TEMPERATURE" operations="read,event">
          <logical type="float" min="-50.0" max="120.0" unit="°C" />
          <physical type="integer" interface="command" value_id="TEMPERATURE">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
          <description>
            <field id="AutoconfRoles" value="WEATHER" />
          </description>
        </parameter>
        <parameter id="HUMIDITY" operations="read,event">
          <logical type="integer" min="0" max="100" unit="%" />
          <physical type="integer" interface="command" value_id="HUMIDITY">
            <event frame="WEATHER_EVENT" />
          </physical>
        </parameter>
        <parameter id="PM_1P0" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="µg/m³" />
          <physical type="integer" interface="command" value_id="PM_1P0">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="PM_2P5" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="µg/m³" />
          <physical type="integer" interface="command" value_id="PM_2P5">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="PM_4P0" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="µg/m³" />
          <physical type="integer" interface="command" value_id="PM_4P0">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="PM_10P0" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="µg/m³" />
          <physical type="integer" interface="command" value_id="PM_10P0">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="NC_0P5" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="/cm³" />
          <physical type="integer" interface="command" value_id="NC_0P5">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="NC_1P0" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="/cm³" />
          <physical type="integer" interface="command" value_id="NC_1P0">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="NC_2P5" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="/cm³" />
          <physical type="integer" interface="command" value_id="NC_2P5">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="NC_4P0" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="/cm³" />
          <physical type="integer" interface="command" value_id="NC_4P0">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="NC_10P0" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="/cm³" />
          <physical type="integer" interface="command" value_id="NC_10P0">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        <parameter id="AVG_PARTICLE_SIZE" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="µm" />
          <physical type="integer" interface="command" value_id="AVG_PARTICLE_SIZE">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="100.0" />
        </parameter>
      </paramset>
      <paramset type="LINK" id="HB-UNI-Sen-PM_link"></paramset>
    </channel>
  </channels>
  <frames>
    <frame id="WEATHER_EVENT" direction="from_device" event="true" type="0x70">
      <parameter type="integer" signed="true"  index="9"  size="1.7" param="TEMPERATURE" />
      <parameter type="integer" index="11" size="1.0" param="HUMIDITY" />
      <parameter type="integer" index="12" size="2.0" param="PM_1P0" />
      <parameter type="integer" index="14" size="2.0" param="PM_2P5" />
      <parameter type="integer" index="16" size="2.0" param="PM_4P0" />
      <parameter type="integer" index="18" size="2.0" param="PM_10P0" />
    </frame>
    <frame id="MEASURE_EVENT" direction="from_device" event="true" type="0x53">
      <parameter type="integer" index= "9" size="2.0" param="NC_0P5" />
      <parameter type="integer" index="11" size="2.0" param="NC_1P0" />
      <parameter type="integer" index="13" size="2.0" param="NC_2P5" />
      <parameter type="integer" index="15" size="2.0" param="NC4P0" />
      <parameter type="integer" index="17" size="2.0" param="NC_10P0" />
      <parameter type="integer" index="19" size="2.0" param="AVG_PARTICLE_SIZE" />
    </frame>
  </frames>
  <paramset_defs></paramset_defs>


Ausschnitt aus dem Sketch:

Code: Alles auswählen

class PMDataMsg1 : public Message {
  public:
    void init(uint8_t msgcnt, int16_t temp, uint8_t humidity, uint16_t mc1p0, uint16_t mc2p5, uint16_t mc4p0, uint16_t mc10p0) {
      // Message Length (first byte param.): 11 + payload. Max. payload: 17 Bytes (https://www.youtube.com/watch?v=uAyzimU60jw)
      uint8_t t1 = (temp >> 8) & 0x7f;
      uint8_t t2 = temp & 0xff;
      Message::init(20, msgcnt, 0x70, BIDI | WKMEUP, t1, t2);
      pload[0] = humidity & 0xff;
      pload[1] = (mc1p0 >> 8) & 0xff;
      pload[2] = mc1p0 & 0xff;         
      pload[3] = (mc2p5 >> 8) & 0xff;
      pload[4] = mc2p5 & 0xff;         
      pload[5] = (mc4p0 >> 8) & 0xff;
      pload[6] = mc4p0 & 0xff;         
      pload[7] = (mc10p0 >> 8) & 0xff;
      pload[8] = mc10p0 & 0xff;         
    }
};

class PMDataMsg2 : public Message {
  public:
    void init(uint8_t msgcnt, uint16_t nc0p5, uint16_t nc1p0, uint16_t nc2p5, uint16_t nc4p0, uint16_t nc10p0, uint16_t partsize) {
      // Message Length (first byte param.): 11 + payload. Max. payload: 17 Bytes (https://www.youtube.com/watch?v=uAyzimU60jw)
      Message::init(23, msgcnt, 0x53, BIDI | WKMEUP, 0, 0);
      pload[0] = (nc0p5 >> 8) & 0xff;
      pload[1] = nc0p5 & 0xff;
      pload[2] = (nc1p0 >> 8) & 0xff;
      pload[3] = nc1p0 & 0xff;         
      pload[4] = (nc2p5 >> 8) & 0xff;
      pload[5] = nc2p5 & 0xff;         
      pload[6] = (nc4p0 >> 8) & 0xff;
      pload[7] = nc4p0 & 0xff;         
      pload[8] = (nc10p0 >> 8) & 0xff;
      pload[9] = nc10p0 & 0xff;  
      pload[10] = (partsize >> 8) & 0xff;
      pload[11] = partsize & 0xff;               
    }
};


class SensChannel : public Channel<Hal, List1, EmptyList, List4, PEERS_PER_CHANNEL, GDList0>, public Alarm {
    PMDataMsg1 msg1;
    PMDataMsg2 msg2;
    Sens_SHT31<0x44> sht31;  //SG: GY breakout board standard address
    Sens_SPS30 sps30;
    uint16_t millis;

  public:
    SensChannel () : Channel(), Alarm(5), millis(0) {}
    virtual ~SensChannel () {}

    virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
      // reactivate for next measure
      tick = seconds2ticks(10);
      clock.add(*this);
      sht31.measure();
      sps30.measure();
      DPRINT("temp / hum = ");DDEC(sht31.temperature());DPRINT(" / ");DDECLN(sht31.humidity());
      DPRINT("mass concentration 1 / 2.5 / 4 / 10 = ");DDEC(sps30.mc_1p0());DPRINT(" / ");DDEC(sps30.mc_2p5());;DPRINT(" / ");DDEC(sps30.mc_4p0());;DPRINT(" / ");DDECLN(sps30.mc_10p0());
      DPRINT("numb concentration 0.5 / 1 / 2.5 / 4 / 10 = ");DDEC(sps30.nc_0p5());DPRINT(" / ");DDEC(sps30.nc_1p0());DPRINT(" / ");DDEC(sps30.nc_2p5());;DPRINT(" / ");DDEC(sps30.nc_4p0());;DPRINT(" / ");DDECLN(sps30.nc_10p0());
      DPRINT("avg particle size = ");DDECLN(sps30.partsize());
            
      uint8_t msgcnt = device().nextcount();
      //msg1.init( msgcnt, sht31.temperature(), sht31.humidity(), sps30.mc_1p0(), sps30.mc_2p5(), sps30.mc_4p0(), sps30.mc_10p0());
      msg1.init( msgcnt, 0x0333, 0x55, sps30.mc_1p0(), sps30.mc_2p5(), sps30.mc_4p0(), sps30.mc_10p0());
      device().sendPeerEvent(msg1, *this);
      msgcnt = device().nextcount();
      msg2.init( msgcnt, sps30.nc_0p5(), sps30.nc_1p0(), sps30.nc_2p5(), sps30.nc_4p0(), sps30.nc_10p0(), sps30.partsize());
      device().sendPeerEvent(msg2, *this);      
    }
Serielle Ausgabe:

Code: Alles auswählen

AskSin++ v5.0.0 (Jan 23 2022 20:33:38)
SHT31 OK
SPS30 ok, measurement started
Address Space: 32 - 70
CC init1
CC Version: 14
 - ready
Config Freq: 0x2165C2
* Config Changed       : List0
* LED Mode             : 1
* Low Bat Limit        : 0
* Sendeversuche        : 3
* SENDEINTERVALL       : 10
temp / hum = 0 / 0
mass concentration 1 / 2.5 / 4 / 10 = 75 / 79 / 79 / 79
numb concentration 0.5 / 1 / 2.5 / 4 / 10 = 501 / 598 / 602 / 602 / 602
avg particle size = 48
<- 14 01 A2 70 F82401 BA4BC3 03 33 55 00 4B 00 4F 00 4F 00 4F  - 231
-> 0A 01 80 02 BA4BC3 F82401 00  - 356
waitAck: 01
<- 17 02 A2 53 F82401 BA4BC3 00 00 01 F5 02 56 02 5A 02 5A 02 5A 00 30  - 399
-> 0A 02 80 02 BA4BC3 F82401 00  - 514
waitAck: 01
Ich habe schon verschiedene message types probiert und mit den subtypes gespielt, aber leider fast keine Ahnung, wie diese arbeiten sollten und wie ueberhaupt die Zuordnung der groessenbedingt in zwei messages aufgeteilten Daten zu den Datenpunkten in der CCU funktioniert. Insofern stochere ich da im Nebel.

Hinweise, wie ich das zum Laufen bekomme, waeren super.

Vielen Dank vorab,
Stephan

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Umfangreiche Sensordaten uebertragen

Beitrag von jp112sdl » 23.01.2022, 20:56

HMSteve hat geschrieben:
23.01.2022, 20:46
Ausschnitt aus dem xml:

Code: Alles auswählen

<frame id="WEATHER_EVENT" direction="from_device" event="true" type="0x70">
 ...
<frame id="MEASURE_EVENT" direction="from_device" event="true" type="0x53">
In den Frames sind keine Channel angegeben. Weder fixed_channel noch channel_field.
Keine Ahnung, ob das so funktioniert / funktionieren kann.
Keine eQ-3 XML hat das zumindest so.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: Umfangreiche Sensordaten uebertragen

Beitrag von HMSteve » 23.01.2022, 21:28

Danke, Jérôme. Die Channel-Zuordnung hatte ich beim Spielen irgendwann zwischendurch rausgenommen. Mit

Code: Alles auswählen

  <frames>
    <frame id="WEATHER_EVENT" direction="from_device" event="true" type="0x70" fixed_channel="1">
      <parameter type="integer" signed="true"  index="9"  size="1.7" param="TEMPERATURE" />
      <parameter type="integer" index="11" size="1.0" param="HUMIDITY" />
      <parameter type="integer" index="12" size="2.0" param="PM_1P0" />
      <parameter type="integer" index="14" size="2.0" param="PM_2P5" />
      <parameter type="integer" index="16" size="2.0" param="PM_4P0" />
      <parameter type="integer" index="18" size="2.0" param="PM_10P0" />
    </frame>
    <frame id="MEASURE_EVENT" direction="from_device" event="true" type="0x53" fixed_channel="1">
      <parameter type="integer" index= "9" size="2.0" param="NC_0P5" />
      <parameter type="integer" index="11" size="2.0" param="NC_1P0" />
      <parameter type="integer" index="13" size="2.0" param="NC_2P5" />
      <parameter type="integer" index="15" size="2.0" param="NC4P0" />
      <parameter type="integer" index="17" size="2.0" param="NC_10P0" />
      <parameter type="integer" index="19" size="2.0" param="AVG_PARTICLE_SIZE" />
    </frame>
  </frames>
bekomme ich nun die Daten des ersten Frame mit msg.type=0x70. Allerdings nicht die des zweiten mit msg.type=0x53.
pm2.JPG
Habe verschiedene Msg-Typen gewaehlt, um eine Zuordnung der Messages zu ermoeglichen, aber offenbar geht das so nicht?

Viele Gruesse,
Stephan

Benutzeravatar
FUEL4EP
Beiträge: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

Re: Umfangreiche Sensordaten uebertragen

Beitrag von FUEL4EP » 23.01.2022, 21:32

Hi Stephan,

vielleicht hilft Dir Jérômes Anleitung hier.
Sein 'Kochrezept' steht bei mir noch auf der ToDo-Liste.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Umfangreiche Sensordaten uebertragen

Beitrag von jp112sdl » 23.01.2022, 21:33

HMSteve hat geschrieben:
23.01.2022, 21:28
bekomme ich nun die Daten des ersten Frame mit msg.type=0x70. Allerdings nicht die des zweiten mit msg.type=0x53.
Diesen "Mix" habe ich auch noch nicht versucht.

Da hilft dir in erster Linie das RFD-Log auf der CCU weiter.
Entweder über Zentralenwartung bei Funk auf "Alles loggen " stellen und dann die /var/log/messages tailen

Oder RFD stoppen (Raspberrymatic: monit stop rfd) und auf der Konsole mit Konsolenlogging starten:

Code: Alles auswählen

/bin/rfd -f /var/etc/rfd.log -c -l 0
Und dann mal schauen, was beim Empfang der 53er Message so ausgegeben wird.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: Umfangreiche Sensordaten uebertragen

Beitrag von HMSteve » 23.01.2022, 21:54

Mit der 70er Msg macht er in der ersten Logzeile komische Sachen (windspeed, rain counter und so, da muss ich auch nochmal schauen)
Aber mit de r53er macht er offenbar gar nichts:

Code: Alles auswählen

Jan 23 21:48:49 HMTest user.debug rfd: RX for SGSENPM001: @2293422304 RSSI=-53dB 0xF82401 -> 0xBA4BC3 WEATHER [SEQ0925842]:   CNT=95,RPTEN=1,RPTED=0,BIDI=1,BURST=0,WAKEUP=0,WAKEMEUP=1,BCAST=0,TYPE=0x70   LOWBAT = 0   TEMP = 819   HUMIDITY = 85   RAINING = 0   RAINCNT = 49   WINDSPEED = 52   WINDDIR = 0   WINDDIR_RANGE = 0   BRIGHTNESS = 0
Jan 23 21:48:49 HMTest user.debug rfd: Event: SGSENPM001:1.TEMPERATURE=81.900000
Jan 23 21:48:49 HMTest user.debug rfd: Event: SGSENPM001:1.HUMIDITY=85
Jan 23 21:48:49 HMTest user.debug rfd: Event: SGSENPM001:1.PM_1P0=4.900000
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send 2 events
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send 3 events
Jan 23 21:48:49 HMTest user.debug rfd: Event: SGSENPM001:1.PM_2P5=5.200000
Jan 23 21:48:49 HMTest user.debug rfd: Event: SGSENPM001:1.PM_4P0=5.200000
Jan 23 21:48:49 HMTest user.debug rfd: Event: SGSENPM001:1.PM_10P0=5.200000
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send 1 events
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send completed
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send 3 events
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send completed
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send 4 events
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send completed
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send completed
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send 5 events
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send completed
Jan 23 21:48:49 HMTest user.debug rfd: HSSXmlRpcEventDispatcher::Handle send completed
Jan 23 21:48:49 HMTest user.debug rfd: RX for SGSENPM001: @2293422474 RSSI=-53dB 0xF82401 -> 0xBA4BC3 Generic [SEQ0925842]:   CNT=96,RPTEN=1,RPTED=0,BIDI=1,BURST=0,WAKEUP=0,WAKEMEUP=1,BCAST=0,TYPE=0x53   DATA = 00 00 01 49 01 89 01 8B 01 8B 01 8B 00 33 
Viele Gruesse,
Stephan

HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: Umfangreiche Sensordaten uebertragen

Beitrag von HMSteve » 23.01.2022, 21:58

FUEL4EP hat geschrieben:
23.01.2022, 21:32
vielleicht hilft Dir Jérômes Anleitung hier.
Sein 'Kochrezept' steht bei mir noch auf der ToDo-Liste.
Hallo Ewald,

den Thread habe ich heute schon gruendlich gelesen, aber dort geht es ja um unabhaengig triggernde Kanaele. Genau das will ich ja eigentlich nicht.

Viele Gruesse,
Stephan

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Umfangreiche Sensordaten uebertragen

Beitrag von jp112sdl » 24.01.2022, 06:12

Was mir gerade noch aufgefallen ist: Im ersten Beitrag in der XML sind doch auch alle Werte im <event frame="WEATHER_EVENT" /> angegeben.

z.B. NC_0P5 hast du jedoch in den MEASURE_EVENT gepackt:

Code: Alles auswählen

        <parameter id="NC_0P5" operations="read,event">
          <logical type="float" min="0.0" max="6553.5" unit="/cm³" />
          <physical type="integer" interface="command" value_id="NC_0P5">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
        </parameter>
        ...
        
    <frame id="MEASURE_EVENT" direction="from_device" event="true" type="0x53" fixed_channel="1">
      <parameter type="integer" index= "9" size="2.0" param="NC_0P5" />
      ...

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

HMSteve
Beiträge: 539
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

Re: Umfangreiche Sensordaten uebertragen

Beitrag von HMSteve » 24.01.2022, 07:53

Guten Morgen Jérôme,

danke Dir, das war's :D

Mit

Code: Alles auswählen

<frame id="WEATHER_EVENT" direction="from_device" event="true" type="0x53" fixed_channel="1">
sieht man im log schoen, wie der rfd nach der 70er Message nun auch die events der 53er Message verarbeitet.

Viele Gruesse,
Stephan

jp112sdl
Beiträge: 12115
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Umfangreiche Sensordaten uebertragen

Beitrag von jp112sdl » 24.01.2022, 08:05

Ich hätte jetzt eher erwartet, dass du bei den Werte-Parameter das WEATHER auf MEASURE änderst 8)
Aber wenn es so auch geht - sehr gut!

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“