Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

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

Moderator: Co-Administratoren

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 14.11.2020, 11:22

FUEL4EP hat geschrieben:
14.11.2020, 11:09
Frage: Kann eine Fehlermeldung von atof() wegen einer falschen Notation (z.B. 23.56F-01 statt 23.56E-01) einer Fließkommazahl an das WebUI zurückgegeben werden bzw. die Eingabe dann abgelehnt werden?
Hab ich noch nicht gemacht, aber mein Gedankengang wäre, die Methode zu nehmen, mit der auch die Textersetzungen automatisch erfolgen (z.B. dass aus ß ein ~ wird), sobald man das Textfeld verlässt ('onBlur'):
https://github.com/eq-3/occu/blob/maste ... .tcl#L1158

Es wird die Funktion 'encodeStringStatusDisplay' aufgerufen, die findest du in der /www/webui/webui.js

Code: Alles auswählen

encodeStringStatusDisplay = function(elmID, is4Dis, specialSZ)
{
...
  jElm.val(outString);
};

Nach dem Prinzip baust du dir einfach eine Prüfung und lässt z.B. ein alert aufpoppen.

Ist halt JavaScript... Kann ich auch nicht besonders gut

VG,
Jérôme ☕️

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

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 14.11.2020, 12:42

Vielen Dank, Jérôme!

Javascript ist auch ein neues und dickes Brett für mich :roll:
Grüße

Ewald

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 14.11.2020, 15:02

Bevor ich in das dicke JavaScript-Brett beißen muss, noch ein Versuch einer einfacheren Lösung:

Wie kann ich im Falle einer falschen Eingabe in das Parametertextfeld z.B. dort den Text 'Wrong floating point input' ausgeben?

Gibt es so etwas wie this->device().putList0().<parametertext_field>()?
Grüße

Ewald

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 14.11.2020, 15:24

Die gesuchte Methode müsste writeList in Device.h sein

Code: Alles auswählen

 
 void writeList (const GenericList& list,const uint8_t* data,uint8_t length) {
    for( uint8_t i=0; i<length; i+=2, data+=2 ) {
      list.writeRegister(*data,*(data+1));
    }
 }
 
Grüße

Ewald

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 14.11.2020, 19:55

FUEL4EP hat geschrieben:
14.11.2020, 15:02
Wie kann ich im Falle einer falschen Eingabe in das Parametertextfeld z.B. dort den Text 'Wrong floating point input' ausgeben?
Wo "dort"? Im seriellen Monitor?
Mehr geht ja nicht... oder halt an einem angeschlossenen Display.

Auf CCU-Seite bringt dir das alles nicht viel, weil der falsche Wert ja trotzdem erfolgreich zum Gerät übertragen wird und auch in der WebUI dann als Einstellung angezeigt wird.
Sauberer wäre es wirklich, schon im Vorfeld die Falscheingabe abzufangen

VG,
Jérôme ☕️

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

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 15.11.2020, 10:31

Hi Jérôme,

danke für Deinen Hinweis.

Der Versuch ergab, dass die Strings als Geräteparameter nicht unterstützt werden:

Code: Alles auswählen

 <parameter id="TEXTLINE_1">
      <logical type="string" />
       <physical type="string" interface="config_string" list="1" index="54" size="12" />
 </parameter>
Wenn ich das in die XML Datei einfüge, werden keine Geräteparameter angezeigt. Damit ist mein skizzierter Ansatz hinfällig.

Ich werde zunächst Toms Vorschlag, Vorkomma- und Nachkomma-Zahl in 2 Felder in der WebUI einzugeben, verfolgen.

Wie geht eine selbst gestrickte Konfigurations-Ansicht, um die beiden Zahlen nebeneinander darzustellen? Ein Beispiel reicht.
Grüße

Ewald

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 15.11.2020, 10:59

FUEL4EP hat geschrieben:
15.11.2020, 10:31
Wenn ich das in die XML Datei einfüge, werden keine Geräteparameter angezeigt. Damit ist mein skizzierter Ansatz hinfällig.
Geräteparameter gehören in die List0; also wenn du das als Geräte- und nicht als Kanal-Parameter nutzt, musst du list="0" nehmen.
Er muss auch im MASTER-Paramset (<paramset type="MASTER" ...) außerhalb der Channels hinterlegt werden.
FUEL4EP hat geschrieben:
15.11.2020, 10:31
Wie geht eine selbst gestrickte Konfigurations-Ansicht, um die beiden Zahlen nebeneinander darzustellen? Ein Beispiel reicht.
Siehe Beitrag auf der vorherigen Seite
viewtopic.php?f=76&t=62578#p618408
ganz unten.

VG,
Jérôme ☕️

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

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 16.11.2020, 22:58

Hallo Zusammen,

mit den easymodes habe ich mich noch nicht angefreundet. Das ist mal was für mehrere lange schlaflose Winternächte ..

Heute strauchelte ich mit der Offseteingabe von Kanalparametern, wo ich Eure Hilfe brauche:
Parameter.png
Gebe ich z.B. als HumidityOffset '-3' in die Maske ein, wird der eingegebene Wert korrekt in das C++ Programm übernommen.
In der Maske spring der Wert aber von '-3' auf '5 nach dem Drücken von 'Übernehmen''. Das passiert nur bei negativen Werten. Positive Eingaben, z.B. '3' bleiben dagegen in der Maske erhalten.

Hier die rftypes XML Beschreibung dazu:

Code: Alles auswählen

  
  <channel index="1" type="WEATHER" autoregister="true">
      <link_roles>
        <source name="WEATHER_CS" />
      </link_roles>
      <paramset type="MASTER" id="HB-UNI-Sensor-AQ-BME680_master" >
        <parameter id="TemperatureOffset">
          <logical type="float" min="-5.0" max="5.0" default="0.0" unit="K" />
          <physical type="integer" signed="true" interface="config" list="1" index="1" size="2" />
          <conversion type="float_integer_scale" factor="10" />
        </parameter>
        <parameter id="HumidityOffset">
          <logical type="float" signed="true" min="-5.0" max="5.0" default="0.0" unit="%" />
          <physical type="integer" interface="config" list="1" index="3" size="1" />
          <conversion type="float_integer_scale" factor="1.0" />
        </parameter>
        <parameter id="PressureOffset">
          <logical type="float" min="-100.0" max="100.0" default="0.0" unit="hPa" />
          <physical type="integer" signed="true" interface="config" list="1" index="4" size="2" />
          <conversion type="float_integer_scale" factor="10" />
        </parameter>
        <parameter id="max_decay_factor_upper_limit">
          <logical type="float" min="0.0" max="100.0" default="70.0" unit="%" />
          <physical type="integer" interface="config" list="1" index="6" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
        <parameter id="max_increase_factor_lower_limit">
          <logical type="float" min="0.0" max="100.0" default="30.0" unit="%" />
          <physical type="integer" interface="config" list="1" index="7" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
      </paramset>
      <paramset type="VALUES" id="HB-UNI-Sensor-AQ-BME680_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>
Was mache ich falsch? Wie können negative Offsets (Parameter) eingegeben werden?

Zweite Frage: Wie bringe ich die Sensor LED zum blinken, wenn eine neue Konfiguration zur Übernahme anliegt?
Die Übernahme funktioniert durch Drücken der Config-Taste, nur hätte ich gerne optional ein Blinken der LED bis zur erfolgreichen Übernahme.
Grüße

Ewald

jp112sdl
Beiträge: 6762
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 341 Mal
Danksagung erhalten: 696 Mal
Kontaktdaten:

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von jp112sdl » 17.11.2020, 05:36

FUEL4EP hat geschrieben:
16.11.2020, 22:58
Was mache ich falsch? Wie können negative Offsets (Parameter) eingegeben werden?
Hmm... Eigentlich sollte das so klappen

Code: Alles auswählen

       <parameter id="TEMPERATURE_OFFSET">                                
        <logical type="float" min="-5.0" max="5.0" unit="K" default="0"/>                      
        <physical type="integer" signed="true" interface="config" list="1" index="1" size="4"/>
        <conversion type="float_integer_scale" factor="10"/>                                
       </parameter>    
       
FUEL4EP hat geschrieben:
16.11.2020, 22:58
Zweite Frage: Wie bringe ich die Sensor LED zum blinken, wenn eine neue Konfiguration zur Übernahme anliegt?
Die Übernahme funktioniert durch Drücken der Config-Taste, nur hätte ich gerne optional ein Blinken der LED bis zur erfolgreichen Übernahme.
Der Sketch befindet sich doch im "Tiefschlaf".
Wie soll das Gerät mitbekommen, dass Configdaten anliegen?
Es erst mit Drücken des Config-Tasters wach.
Während der Übertragung der Configdaten blinkert die Status-LED dann ja.

VG,
Jérôme ☕️

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

PN sind deaktiviert!

FUEL4EP
Beiträge: 140
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 23 Mal
Danksagung erhalten: 13 Mal

Re: Geräte-/ Kanalparameter einstellen / firmware rftypes XML Datei

Beitrag von FUEL4EP » 17.11.2020, 13:16

Hi Jérôme,

danke füer Deine Antworten.

#2 ist klar.

#1 ist noch nicht gelöst. Ich hatte in meiner vorherigen XML Datei das 'signed="true"'' manchmal an der falschen Stelle. Jetzt ist es korrigiert:

Code: Alles auswählen

<channel index="1" type="WEATHER" autoregister="true">
      <link_roles>
        <source name="WEATHER_CS" />
      </link_roles>
      <paramset type="MASTER" id="HB-UNI-Sensor-AQ-BME680_master" >
        <parameter id="TemperatureOffset">
          <logical type="float" min="-5.0" max="5.0" default="0.0" unit="K" />
          <physical type="integer" signed="true" interface="config" list="1" index="1" size="2" />
          <conversion type="float_integer_scale" factor="10" />
        </parameter>
        <parameter id="HumidityOffset">
          <logical type="float" min="-5.0" max="5.0" default="0.0" unit="%" />
          <physical type="integer" signed="true" interface="config" list="1" index="3" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
        <parameter id="PressureOffset">
          <logical type="float" min="-100.0" max="100.0" default="0.0" unit="hPa" />
          <physical type="integer" signed="true" interface="config" list="1" index="4" size="2" />
          <conversion type="float_integer_scale" factor="10" />
        </parameter>
        <parameter id="max_decay_factor_upper_limit">
          <logical  type="float" min="0.0" max="100.0" default="70.0" unit="%" />
          <physical type="integer" signed="true" interface="config" list="1" index="6" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
        <parameter id="max_increase_factor_lower_limit">
          <logical type="float" min="0.0" max="100.0" default="30.0" unit="%" />
          <physical type="integer" signed="true" interface="config" list="1" index="7" size="1" />
          <conversion type="float_integer_scale" factor="1" />
        </parameter>
      </paramset>
      <paramset type="VALUES" id="HB-UNI-Sensor-AQ-BME680_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>
Hier der C++-Code dazu:

Code: Alles auswählen

DEFREGISTER(UReg1, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07)
class SensorList1 : public RegList1<UReg1> {
  public:
    SensorList1 (uint16_t addr) : RegList1<UReg1>(addr) {}

    bool tempOffset10 (int16_t value) const {
      return this->writeRegister(0x01, (value >> 8) & 0xff) && this->writeRegister(0x02, value & 0xf);
    }
    int16_t tempOffset10 () const {
      return (((int16_t)(this->readRegister(0x01, 0)) << 8) + (int16_t)(this->readRegister(0x02, 0)));
    }

    bool humidOffset (int8_t value) const {
      return this->writeRegister(0x03, value & 0xff);
    }
    int8_t humidOffset () const {
      return (int8_t)(this->readRegister(0x03, 0));
    }    

    bool pressOffset10 (int16_t value) const {
      return this->writeRegister(0x04, (value >> 8) & 0xff) && this->writeRegister(0x05, value & 0xff);
    }
    int16_t pressOffset10 () const {
      return (((int16_t)(this->readRegister(0x04, 0)) << 8) + (int16_t)(this->readRegister(0x05, 0)));
    }
    
    bool max_decay_factor_upper_limit (uint8_t value) const {
      return this->writeRegister(0x06, value & 0xff);
    }
    uint8_t max_decay_factor_upper_limit () const {
      return (uint8_t)(this->readRegister(0x06, 0));
    }

    bool max_increase_factor_lower_limit (uint8_t value) const {
      return this->writeRegister(0x07, value & 0xff);
    }
    uint8_t max_increase_factor_lower_limit () const {
      return (uint8_t)(this->readRegister(0x07, 0));
    }

    void defaults () {
      clear();
      tempOffset10(-16);  // temperature measurement offset, multiplied by 10 [K], calibrate your sensor's characteristics
      humidOffset(3);     // humidity measurement offset [%], calibrate your sensor's characteristics
      pressOffset10(-60); // pressure measurement offset, multiplied by 10 [hPa], calibrate your sensor's characteristics
      max_decay_factor_upper_limit(70);  //IIR's filter max decay value of gas resistor upper limit  [%]
      max_increase_factor_lower_limit(30);  //IIR's filter max increase value of gas resistor lower limit  [%]
      DPRINTLN(F("Init of channel parameters done"));
    }
    
};
Leider auch damit das gleiche Verhalten: Nach dem Drücken des 'OK' Buttons des 'Verknüfungs- und Programmstatus' Pop-Up Fensters, dass die Übertragung der Daten zum Gerät erfolgreich abgeschlossen ist, wird aus der negativen Zahl in der Eingabemaske die maximal positive Zahl.

Hat jemand ein AsksinPP Gerät am Laufen, bei dem das Setzen eines negativen Parameters in der Maske erhalten bleibt?
Welcher Code beschreibt die Maske? Ist es AsksinPP oder RaspberryMatic/Homematic Code? Wo muss ich suchen?

Danke für die Hilfe im Voraus!
Grüße

Ewald

Antworten

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