HB-UNI-Sensor1 - Neuauflage

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

Moderator: Co-Administratoren

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

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von jp112sdl » 05.03.2020, 10:15

zu:
Matsch hat geschrieben:
05.03.2020, 10:00
2. Ergänzend: Ein Helligkeitssensor zur Messung der Sonnenlichtstärke mit dem Unterschied, dabei den empfangenden Sensor mit Schrittmotoren immer nahezu in Sonnenrichtung nachzuführen, um den Einfallswinkel bei annähernd 90° zu halten. Die Motorsteuerung müßte ich dann ergänzend implementieren.
hilft dir das evtl. weiter:
https://github.com/jp112sdl/HB-OU-MOT-SERVO

VG,
Jérôme ☕️

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

Matsch
Beiträge: 5427
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 114 Mal
Danksagung erhalten: 734 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von Matsch » 05.03.2020, 11:25

Das kannte ich noch nicht, das schaue ich mir an.
Die Schrittmotorsteuerung an sich ist ja kein Problem, das habe ich schon mal aufgebaut, eher die Synchronisation mit den Sonnenwinkeln. Da ich mit der Definition der Kanäle und der Erstellung von Add-Ons in der CCU noch nicht wirklich durchsehe, ist das meine Schwachstelle im Projekt.
Aber das ist ja eine andere Baustelle und hat dann nichts mehr mit dem UNI-Sensor zu tun.

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

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von jp112sdl » 05.03.2020, 11:59

Matsch hat geschrieben:
05.03.2020, 11:25
Die Schrittmotorsteuerung an sich ist ja kein Problem
Ja, ich finde aber, wenn man nicht mehr als ~200° schwenken muss, eignet sich ein Servo besser. Den kann man mit einem Einzeiler auf den gewünschten Winkel fahren lassen. Bei Schrittmotoren muss man immer noch die (Null-)Positionserfassung selbst verwirklichen = mehr Aufwand.

VG,
Jérôme ☕️

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

Matsch
Beiträge: 5427
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 114 Mal
Danksagung erhalten: 734 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von Matsch » 05.03.2020, 12:50

Das schau ich mir auf jeden Fall an, klingt interessant. Noch hab ich kein PCB erstellt.

PS: Die Servos sind tatsächlich eine gute Idee. Eine Unbekannte im Spiel sind aber die internen Potis. Wie lange werden die sicher mitspielen?

magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 45 Mal
Danksagung erhalten: 22 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von magnum1795 » 07.07.2020, 13:52

@ TomMajor

ich habe mir mal den Uni Sensor nachgebaut, allerdings auf eine andere Platine. Habe diese https://github.com/ronnythomas/HB-UNI-230V verwendet und als Sensoren habe ich den BME280 und einen DS18B20 angeschlossen. Dann in der Device_Example.h richtig eingestellt und in der CCU 3 RaspberryMatic noch die hb-tm-devices-addon.gz installiert. Anlernen ging dann Problemlos (hatte vorher vergessen die addons zu installieren und mich gewundert das ich nicht anlernen konnte :oops: ) Soweit also alles gut.

Dennoch hätte ich eine Frage an Dich. In der WebUI wird ja Temperatur, Luftfeuchte, Luftdruck,Helligkeit, Spannung und Ventilposition angezeigt.
Helligkeit und Ventilposition brauche ich eigentlich gar nicht, da keine Sensoren dafür angeschlossen sind. Viel wichtiger wäre mir persönlich, das auch die Temperatur/en vom DS18B20 mit angezeigt würden.

Gibt es dazu eine Möglichkeit das ich das in der WebUI auch angezeigt bekomme? Vielen Dank schon mal für die wirklich Tolle Arbeit. Habe mittlerweile schon einiges nachgebaut und bin soweit zufrieden damit. Vielleicht kannst dir das ja mal anschauen oder einen Tipp geben wie man eben die Temperatu/en von den anderen Sensoren (würde gern 2 Stück DS18B20 verbauen wollen), hier speziell der/die DS18B20 mit angezeigt wird

Im Log werden Sie ja Richtig angegeben.
  • AskSin++ V4.1.6 (Jul 7 2020 12:57:13)
    DS18x20 found: 28AE2A7F3A190192
    BME280 found
    Sensor setup done
    Serial: UNISENS001
    Clock SYSCLOCK
    Address Space: 32 - 79
    CC init1
    CC Version: 04
    - ready
    tmBattery Voltage: 3274
    Battery set low: 21
    Battery set crit: 19
    Config Freq: 0x21657A
    Config Changed: List0
    ledMode: 1
    lowBatLimit: 21
    Battery set low: 21
    transmitDevTryMax: 6
    updCycle: 600
    altitude: 0
    BME280 Temperature x10 : 245
    BME280 Pressure x10 : 9986
    BME280 PressureNN x10 : 9986
    BME280 Humidity : 42
    DS18x20 Temperature : 223
Dateianhänge
uni sensor 1-3.jpg
uni sensor 1-2.jpg
uni sensor 1-1.jpg
IMG_20200707_132946.jpg

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von TomMajor » 07.07.2020, 15:20

Danke für die Blumen :) .
Habe mich bemüht dass in Dokumentation und Konfiguration so einsteigerfreundlich wie möglich zu machen.

Wenn du die WebUI Anzeige und Sensoren ändern willst würde ich dir das Feature
Benutzerspezifische Sensordaten empfehlen
https://github.com/TomMajor/SmartHome/t ... ensordaten

du musst dann in der message init die payload nach deinen Vorstellungen ändern, also z.B. zweite Temperatur statt Helligkeit
https://github.com/TomMajor/SmartHome/b ... 1.ino#L155

dann für die geänderte payload ein neues custom xml machen und hier die geänderte payload anpassen:
https://github.com/TomMajor/SmartHome/b ... 1.xml#L143

die ID 0xF103 in Sketch/Cfg und xml auch am Besten ändern

und das Ganze wie gesagt über den Mechanismus Benutzerspezifische Sensordaten einspielen.

Wenn alles so läuft wie geplant überlebt dann diese custom Konfiguration auch RaspberryMatic- und AddOn-Updates.

Hoffe das hilft.
Viele Grüße,
Tom

magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 45 Mal
Danksagung erhalten: 22 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von magnum1795 » 07.07.2020, 18:17

vielen Dank. Aber da muss ich mich erst noch gründlicher einlesen. Werde es aber auf jeden Fall mal testen. Denke aber das ich das irgendwie hinbekommen werde, wenn es auch auf den ersten Blick sich ziemlich Kompliziert anhört/liest :roll:

Aber Rom wurde ja auch nicht an einen Tag gebaut. Macht schon Spaß und wenn es dann noch funktioniert, umsomehr. :lol:

PS: Sorry, gleich noch paar Fragen. Im Github (deine Verlinkung) steht z.B. das hier

> Ab Firmware 0x13 können zwei extra Byte 'customData' in der Payload mit benutzerspezifischen Daten belegt und mit einer alternativen Firmware xml-Datei der RaspberryMatic/CCU2/CCU3-Zentrale bzw. mit dem Perl-Skript FHEM zur Verfügung gestellt werden.

Diese alternative Firmware xml-Datei muss für die Behandlung von 'customData' angepasst werden und im Verzeichnis
/usr/local/addons/hb-uni-sensor1/customized_firmware
liegen.

Das Verzeichniss gibt es bei mir aber nicht. Aber in diesen >

/usr/local/addons/hb-tm-devices-addon/customized_firmware_bsp bin ich dann fündig geworden. Denke das sollte doch das "Richtige" sein, oder? (Eventuell dann mal anpassen auf github).
Dateianhänge
1.jpg

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von TomMajor » 08.07.2020, 01:36

Da hast du Recht. Seit diesem Jahr habe ich das Sammel-AddOn hb-tm-devices-addon vorher waren das einzelne AddOn und das ist so eine Stelle wo noch der alte AddOn Namen drinsteht. Werde ich berichtigen.
Viele Grüße,
Tom

magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 45 Mal
Danksagung erhalten: 22 Mal

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von magnum1795 » 09.07.2020, 10:34

@ TomMajor

ich komme leider nicht so Recht weiter. Du schreibst zwar das man das am besten mit customData macht, habe es aber mal anders versucht. Da ich die "Ventilposition" absolut nicht brauche, versuchte ich diese zu entfernen und an deren Stelle die zweite Temperatur (in meinen Fall Wassertemperatur. Hier könnte z.B. auch DS18B20 stehen, dann weiß man auch gleich Bescheid) eingetragen.

Code: Alles auswählen

<?xml version="1.0" encoding="iso-8859-1"?>
<device version="2" rx_modes="CONFIG,WAKEUP,LAZY_CONFIG" cyclic_timeout="45000">
  <supported_types>
    <type name="HB-UNI-Sensor1" id="HB-UNI-Sensor1" updatable="true">
      <parameter index="9.0" size="1.0" cond_op="E" const_value="0x13" />
      <parameter index="10.0" size="2.0" const_value="0xF103" />
    </type>
  </supported_types>
  <paramset type="MASTER" id="hm_uni_sen_dev_master">
    <parameter id="DEVICE_LED_MODE">
      <logical type="option">
        <option id="OFF" />
        <option id="ON" default="true" />
      </logical>
      <physical type="integer" interface="config" list="0" index="5.6" size="0.2" />
      <conversion type="integer_integer_map">
        <value_map device_value="0x00" parameter_value="0" />
        <value_map device_value="0x01" parameter_value="1" />
      </conversion>
    </parameter>
    <parameter id="LOW_BAT_LIMIT">
      <logical type="float" min="0.9" max="5.0" default="2.2" unit="V" />
      <physical type="integer" interface="config" list="0" index="18" size="1" />
      <conversion type="float_integer_scale" factor="10" />
    </parameter>
    <parameter id="TRANSMIT_DEV_TRY_MAX">
      <logical type="integer" min="1" max="10" default="6" />
      <physical type="integer" interface="config" list="0" index="20" size="1" />
    </parameter>
    <parameter id="Sendeintervall">
      <logical type="integer" min="60" max="43200" default="600" unit="s" />
      <physical type="integer" interface="config" list="0" index="32" size="2" />
    </parameter>
    <parameter id="Hoehe ueber NN">
      <logical type="integer" min="0" max="10000" default="0" unit="m" />
      <physical type="integer" interface="config" list="0" index="34" size="2" />
    </parameter>
  </paramset>
  <channels>
    <channel index="0" type="MAINTENANCE" ui_flags="internal" class="maintenance" count="1">
      <paramset type="MASTER" id="maint_ch_master" />
      <paramset type="VALUES" id="maint_ch_values">
        <parameter id="UNREACH" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="UNREACH" />
        </parameter>
        <parameter id="STICKY_UNREACH" operations="read,write,event" ui_flags="service,sticky">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="STICKY_UNREACH" />
        </parameter>
        <parameter id="CONFIG_PENDING" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="CONFIG_PENDING" />
        </parameter>
        <parameter id="LOWBAT" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="LOWBAT" />
        </parameter>
        <parameter id="RSSI_DEVICE" operations="read,event">
          <logical type="integer" />
          <physical type="integer" interface="internal" value_id="RSSI_DEVICE" />
        </parameter>
        <parameter id="RSSI_PEER" operations="read,event">
          <logical type="integer" />
          <physical type="integer" interface="internal" value_id="RSSI_PEER" />
        </parameter>
        <parameter id="DEVICE_IN_BOOTLOADER" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="DEVICE_IN_BOOTLOADER" />
        </parameter>
        <parameter id="UPDATE_PENDING" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="UPDATE_PENDING" />
        </parameter>
      </paramset>
    </channel>
    <channel index="1" type="WEATHER" autoregister="true">
      <link_roles>
        <source name="WEATHER_TH" />
      </link_roles>
      <paramset type="MASTER" id="HB-UNI-Sensor1_master" />
      <paramset type="VALUES" id="HB-UNI-Sensor1_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="AIR_PRESSURE" operations="read,event">
          <logical type="float" min="500.0" max="1100.0" unit="hPa" />
          <physical type="integer" interface="command" value_id="AIR_PRESSURE">
            <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>
          <description>
            <field id="AutoconfRoles" value="WEATHER" />
          </description>
        </parameter>
        <parameter id="LUX" operations="read,event">
          <logical type="float" min="0.00" max="200000.00" unit="Lux" />
          <physical type="integer" interface="command" value_id="LUX" no_init="true">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="100.0" />
        </parameter>
        <parameter id="WATER_TEMPERATURE" operations="read,event">
          <logical type="float" min="0.0" max="35.0" unit="°C" />
          <physical type="integer" interface="command" value_id="WATER_TEMPERATURE">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
          <description>
            <field id="AutoconfRoles" value="WEATHER" />
          </description>
        </parameter>
        <parameter id="OPERATING_VOLTAGE" operations="read,event">
          <logical type="float" min="0.5" max="5.5" unit="V" />
          <physical type="integer" interface="command" value_id="OPERATING_VOLTAGE">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="1000.0" />
        </parameter>
      </paramset>  
      <paramset type="LINK" id="HB-UNI-Sensor1_link"></paramset>
    </channel>
  </channels>
  <frames>
    <frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="1" type="0x70">
      <parameter type="integer" signed="true"  index="9"  size="1.7" param="TEMPERATURE" />
      <parameter type="integer" index="11" size="2.0" param="AIR_PRESSURE" />
      <parameter type="integer" index="13" size="1.0" param="HUMIDITY" />
      <parameter type="integer" index="14" size="4.0" param="LUX" />
      <parameter type="integer" index="18" size="1.0" param="WATER_TEMPERATURE" />
      <parameter type="integer" index="19" size="2.0" param="OPERATING_VOLTAGE" />
    </frame>
  </frames>
  <paramset_defs></paramset_defs>
</device>
Ein zusätzliches Feld wird nicht gebraucht, wenn es denn so gehen würde. Woher weiß der aber das ich hier die Temp. vom DS18B20 angezeigt haben möchte?

Im Sketch habe ich das geändert

Code: Alles auswählen

//---------------------------------------------------------
// HB-UNI-Sensor1
// Version 1.18
// (C) 2018-2020 Tom Major (Creative Commons)
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// You are free to Share & Adapt under the following terms:
// Give Credit, NonCommercial, ShareAlike
// +++
// AskSin++ 2016-10-31 papa Creative Commons
//---------------------------------------------------------

//---------------------------------------------------------
// !! NDEBUG sollte aktiviert werden wenn die Sensorentwicklung und die Tests abgeschlossen sind und das Gerät in den 'Produktionsmodus' geht.
// Zum Beispiel bei aktiviertem BME280 und MAX44009 werden damit ca. 2,6 KBytes Flash und 100 Bytes RAM eingespart.
// Insbesondere die RAM-Einsparungen sind wichtig für die Stabilität / dynamische Speicherzuweisungen etc.
// Dies beseitigt dann auch die mögliche Arduino-Warnung 'Low memory available, stability problems may occur'.
//
//#define NDEBUG

//---------------------------------------------------------
// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
#include <MultiChannelDevice.h>
#include <Register.h>
#include "Sensors/tmBattery.h"

//---------------------------------------------------------
// Alle Device Parameter werden aus einer .h Datei (hier im Beispiel Cfg/Device_Example.h) geholt um mehrere Geräte ohne weitere Änderungen des
// Sketches flashen zu können. Für mehrere Geräte einfach mehrere .h Dateien anlegen und dort die Unterschiede zwischen den Geräten definieren. Die
// konfigurierbaren Device Parameter in der .h Datei sind im Einzelnen:
// - Device ID und Device Serial
// - Aktivierung der verwendeten Sensoren
// - Pin Definitionen Allgemein
// - Pin und Address Definitionen der Sensoren
// - Clock Definition
// - Schaltungsvariante und Pins für Batteriespannungsmessung
// - Schwellwerte für Batteriespannungsmessung
#include "Cfg/Device_Example.h"


// number of available peers per channel
#define PEERS_PER_CHANNEL 6

// all library classes are placed in the namespace 'as'
using namespace as;

#ifdef SENSOR_DS18X20
#include "Sensors/Sens_DS18X20.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_BME280
#include "Sensors/Sens_BME280.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_BMP180
#include "Sensors/Sens_BMP180.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_MAX44009
#include "Sensors/Sens_MAX44009.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_TSL2561
#include "Sensors/Sens_TSL2561.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_BH1750
#include "Sensors/Sens_BH1750.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_SHT31
#include "Sensors/Sens_SHT31.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_SHT21
#include "Sensors/Sens_SHT21.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_SHT10
#include "Sensors/Sens_SHT10.h"    // HB-UNI-Sensor1 custom sensor class
#endif

//#ifdef SENSOR_DIGINPUT
//#include "Sensors/Sens_DIGINPUT.h"    // HB-UNI-Sensor1 custom sensor class
//Sens_DIGINPUT digitalInput;           // muss wegen Verwendung in loop() global sein (Interrupt event)
//#endif

#ifdef SENSOR_VEML6070
#include "Sensors/Sens_VEML6070.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef SENSOR_VEML6075
#include "Sensors/Sens_VEML6075.h"    // HB-UNI-Sensor1 custom sensor class
#endif

#ifdef CLOCK_SYSCLOCK
#define CLOCK sysclock
#define SAVEPWR_MODE Sleep<>
#elif defined CLOCK_RTC
#define CLOCK rtc
#define SAVEPWR_MODE SleepRTC
#undef seconds2ticks
#define seconds2ticks(tm) (tm)
#else
#error INVALID CLOCK OPTION
#endif

// define all device properties
// Bei mehreren Geräten des gleichen Typs (HB-UNI-Sensor1) muss Device ID und Device Serial unterschiedlich sein!
// Device ID und Device Serial werden aus einer .h Datei (hier im Beispiel Cfg/Device_Example.h) geholt um mehrere Geräte ohne weitere Änderungen des
// Sketches flashen zu können.
const struct DeviceInfo PROGMEM devinfo = {
    cDEVICE_ID,        // Device ID
    cDEVICE_SERIAL,    // Device Serial
    { 0xF1, 0x03 },    // Device Model
    // Firmware Version
    // die CCU Addon xml Datei ist mit der Zeile <parameter index="9.0" size="1.0" cond_op="E" const_value="0x13" />
    // fest an diese Firmware Version gebunden! cond_op: E Equal, GE Greater or Equal
    // bei Änderungen von Payload, message layout, Datenpunkt-Typen usw. muss die Version an beiden Stellen hochgezogen werden!
    0x13,
    as::DeviceType::THSensor,    // Device Type
    { 0x01, 0x01 }               // Info Bytes
};

// Configure the used hardware
typedef AvrSPI<10, 11, 12, 13>                 SPIType;
typedef Radio<SPIType, 2>                      RadioType;
typedef StatusLed<LED_PIN>                     LedType;
typedef AskSin<LedType, BAT_SENSOR, RadioType> BaseHal;

class Hal : public BaseHal {
public:
    void init(const HMID& id)
    {
        BaseHal::init(id);
#ifdef CLOCK_RTC
        rtc.init();    // init real time clock - 1 tick per second
#endif
        // measure battery every 12h
        battery.init(seconds2ticks(12UL * 60 * 60), CLOCK);
        battery.low(BAT_VOLT_LOW);
        battery.critical(BAT_VOLT_CRITICAL);
    }

    bool runready() { return CLOCK.runready() || BaseHal::runready(); }
} hal;

class WeatherEventMsg : public Message {
public:
    void init(uint8_t msgcnt, int16_t temp, uint16_t airPressure, uint8_t humidity, uint32_t brightness, uint8_t temp1,
              uint16_t batteryVoltage, bool batLow, uint16_t customData)
    {

        uint8_t t1 = (temp >> 8) & 0x7f;
        uint8_t t2 = temp & 0xff;
        if (batLow == true) {
            t1 |= 0x80;    // set bat low bit
        }

        // als Standard wird BCAST gesendet um Energie zu sparen, siehe Beschreibung unten.
        // Bei jeder 20. Nachricht senden wir stattdessen BIDI|WKMEUP, um eventuell anstehende Konfigurationsänderungen auch
        // ohne Betätigung des Anlerntaster übernehmen zu können (mit Verzögerung, worst-case 20x Sendeintervall).
        uint8_t flags = BCAST;
        if ((msgcnt % 20) == 2) {
            flags = BIDI | WKMEUP;
        }
        Message::init(23, msgcnt, 0x70, flags, t1, t2);

        // Message Length (first byte param.): 11 + payload
        //  1 Byte payload -> length 12
        // 12 Byte payload -> length 23
        // max. payload: 17 Bytes (https://www.youtube.com/watch?v=uAyzimU60jw)

        // BIDI|WKMEUP: erwartet ACK vom Empfänger, ohne ACK wird das Senden wiederholt
        // LazyConfig funktioniert, d.h. eine anstehende Conf.Änderung von der CCU wird nach dem nächsten Senden übernommen. Aber erhöhter
        // Funkverkehr wegen ACK
        //
        // BCAST: ohne ACK zu Erwarten, Standard für HM Sensoren.
        // LazyConfig funktioniert nicht, d.h. eine anstehende Conf.Änderung von der CCU muss durch den Config Button am Sensor übernommen
        // werden!!

        // papa:
        // BIDI - fordert den Empfänger auf ein Ack zu schicken. Das wird auch zwingend für AES-Handling gebraucht. BCAST - signalisiert
        // eine Broadcast-Message. Das wird z.B. verwendet, wenn mehrere Peers vor einen Sensor existieren. Es wird dann an einen Peer
        // gesndet und zusätzlich das BCAST-Flag gesetzt. So dass sich alle die Nachrricht ansehen. Ein Ack macht dann natürlich keinen Sinn
        // - es ist ja nicht klar, wer das senden soll.
        //
        // WKMEUP - wird für LazyConfig verwendet. Ist es in einer Message gesetzt, so weiss
        // die Zentrale, dass das Geräte noch kurz auf weitere Nachrichten wartet. Die Lib setzt diese Flag für die StatusInfo-Message
        // automatisch. Außerdem bleibt nach einer Kommunikation der Empfang grundsätzlich für 500ms angeschalten.

        // airPressure
        pload[0] = (airPressure >> 8) & 0xff;
        pload[1] = airPressure & 0xff;

        // humidity
        pload[2] = humidity;

        // brightness (Lux)
        pload[3] = (brightness >> 24) & 0xff;
        pload[4] = (brightness >> 16) & 0xff;
        pload[5] = (brightness >> 8) & 0xff;
        pload[6] = (brightness >> 0) & 0xff;

        // digInputState
        pload[7] = temp1;

        // batteryVoltage
        pload[8] = (batteryVoltage >> 8) & 0xff;
        pload[9] = batteryVoltage & 0xff;

        // user custom data
        pload[10] = (customData >> 8) & 0xff;
        pload[11] = customData & 0xff;
    }
};

// die "freien" Register 0x20/21 werden hier als 16bit memory für das Update
// Intervall in Sek. benutzt siehe auch hb-uni-sensor1.xml, <parameter
// id="Sendeintervall"> .. ausserdem werden die Register 0x22/0x23 für den
// konf. Parameter Höhe benutzt
DEFREGISTER(Reg0, MASTERID_REGS, DREG_LEDMODE, DREG_LOWBATLIMIT, DREG_TRANSMITTRYMAX, 0x20, 0x21, 0x22, 0x23)
class SensorList0 : public RegList0<Reg0> {
public:
    SensorList0(uint16_t addr)
        : RegList0<Reg0>(addr)
    {
    }

    bool     updIntervall(uint16_t value) const { return this->writeRegister(0x20, (value >> 8) & 0xff) && this->writeRegister(0x21, value & 0xff); }
    uint16_t updIntervall() const { return (this->readRegister(0x20, 0) << 8) + this->readRegister(0x21, 0); }

    bool     altitude(uint16_t value) const { return this->writeRegister(0x22, (value >> 8) & 0xff) && this->writeRegister(0x23, value & 0xff); }
    uint16_t altitude() const { return (this->readRegister(0x22, 0) << 8) + this->readRegister(0x23, 0); }

    void defaults()
    {
        clear();
        ledMode(1);
        lowBatLimit(BAT_VOLT_LOW);
        transmitDevTryMax(6);
        updIntervall(600);
        altitude(0);
    }
};

class WeatherChannel : public Channel<Hal, List1, EmptyList, List4, PEERS_PER_CHANNEL, SensorList0>, public Alarm {

    WeatherEventMsg msg;

    int16_t  temperature10;
    uint16_t airPressure10;
    uint8_t  humidity;
    uint32_t brightness100;
    uint8_t  temp1;
    uint16_t customData;
    uint16_t batteryVoltage;
    bool     regularWakeUp;

#ifdef SENSOR_DS18X20
    Sens_DS18X20 ds18x20;
#endif
#ifdef SENSOR_BME280
    Sens_BME280 bme280;
#endif
#ifdef SENSOR_BMP180
    Sens_BMP180 bmp180;
#endif
#ifdef SENSOR_MAX44009
    Sens_MAX44009<MAX44009_ADDR> max44009;
#endif
#ifdef SENSOR_TSL2561
    Sens_TSL2561<TSL2561_ADDR> tsl2561;
#endif
#ifdef SENSOR_BH1750
    Sens_BH1750<BH1750_ADDR> bh1750;
#endif
#ifdef SENSOR_SHT31
    Sens_SHT31<SHT31_ADDR> sht31;
#endif
#ifdef SENSOR_SHT21
    Sens_SHT21 sht21;
#endif
#ifdef SENSOR_SHT10
    Sens_SHT10<SHT10_DATAPIN, SHT10_CLKPIN> sht10;
#endif
#ifdef SENSOR_VEML6070
    Sens_VEML6070<> veml6070;
#endif
#ifdef SENSOR_VEML6075
    Sens_VEML6075 veml6075;
#endif

public:
    WeatherChannel()
        : Channel()
        , Alarm(seconds2ticks(60))
        , temperature10(0)
        , airPressure10(0)
        , humidity(0)
        , brightness100(0)
        , temp1(0)
        , customData(0)
        , batteryVoltage(0)
        , regularWakeUp(true)
    {
    }
    virtual ~WeatherChannel() {}

    virtual void trigger(AlarmClock& clock)
    {
//#ifdef SENSOR_DIGINPUT
//        digitalInput.disableINT();    // digitalInput Interrupt abschalten, dieser könnte beim Senden ausgelöst werden (bei PIR aufgetreten)
//#endif
        measure();
        uint8_t msgcnt = device().nextcount();
        msg.init(msgcnt, temperature10, airPressure10, humidity, brightness100, temp1, batteryVoltage, device().battery().low(), customData);
        if (msg.flags() & Message::BCAST) {
            device().broadcastEvent(msg, *this);
        } else {
            device().sendPeerEvent(msg, *this);
        }
        // reactivate for next measure
        uint16_t updCycle = this->device().getList0().updIntervall();
        set(seconds2ticks(updCycle));
        clock.add(*this);
//#ifdef SENSOR_DIGINPUT
//        if (regularWakeUp) {             // bei Senden nach regulären WakeUp den digitalInput Interrupt sofort wieder einschalten
//            digitalInput.enableINT();    // andernfalls erst nach Entprellen in forceSend()
//        }
//#endif
        regularWakeUp = true;
    }

    void forceSend()
    {
        CLOCK.cancel(*this);
        regularWakeUp = false;    // Verhindert enableINT in trigger()
        trigger(CLOCK);           // Messen/Senden
        delay(250);               // Verzögerung für wiederholtes Senden bzw. digitalInput Entprellen
//#ifdef SENSOR_DIGINPUT
//        digitalInput.enableINT();
//#endif
    }

    void measure()
    {
        // Messwerte mit Dummy-Werten vorbelegen falls kein realer Sensor für die Messgröße vorhanden ist
        // zum Testen der Anbindung an HomeMatic/RaspberryMatic/FHEM
#if !defined(SENSOR_DS18X20) && !defined(SENSOR_BME280) && !defined(SENSOR_BMP180) && !defined(SENSOR_SHT31) && !defined(SENSOR_SHT21)               \
    && !defined(SENSOR_SHT10)
        temperature10 = 188;    // 18.8C (scaling 10)
#endif
#if !defined(SENSOR_BME280) && !defined(SENSOR_SHT31) && !defined(SENSOR_SHT21) && !defined(SENSOR_SHT10)
        humidity = 88;    // 88%
#endif
#if !defined(SENSOR_BME280) && !defined(SENSOR_BMP180)
        airPressure10 = 10880;    // 1088 hPa (scaling 10)
#endif
#if !defined(SENSOR_MAX44009) && !defined(SENSOR_TSL2561) && !defined(SENSOR_BH1750)
        brightness100 = 8800000;    // 88000 Lux (scaling 100)
#endif

// Entweder BME280 oder BMP180 für Luftdruck/Temp, ggf. für anderen Bedarf anpassen
#ifdef SENSOR_BME280
        uint16_t altitude = this->device().getList0().altitude();
        bme280.measure(altitude);
        temperature10 = bme280.temperature();
        airPressure10 = bme280.pressureNN();
        humidity      = bme280.humidity();
#elif defined SENSOR_BMP180
        uint16_t altitude = this->device().getList0().altitude();
        bmp180.measure(altitude);
        temperature10 = bmp180.temperature();
        airPressure10 = bmp180.pressureNN();
#endif

// Falls DS18X20 vorhanden, dessen Temp der BME280/BMP180 Temp vorziehen
#ifdef SENSOR_DS18X20
        ds18x20.measure();
        temp1 = ds18x20.temperature();
#endif

// Feuchte/Temp vom SHT31/21/10 falls kein BME280 vorhanden
#ifndef SENSOR_BME280
#ifdef SENSOR_SHT31
        sht31.measure();
        temperature10 = sht31.temperature();
        humidity      = sht31.humidity();
#elif defined SENSOR_SHT21
        sht21.measure();
        temperature10 = sht21.temperature();
        humidity      = sht21.humidity();
#elif defined SENSOR_SHT10
        sht10.measure();
        temperature10 = sht10.temperature();
        humidity      = sht10.humidity();
#endif
#endif

// Entweder MAX44009 oder TSL2561 oder BH1750 für Helligkeit, ggf. für anderen Bedarf anpassen
#ifdef SENSOR_MAX44009
        max44009.measure();
        brightness100 = max44009.brightnessLux();
#elif defined SENSOR_TSL2561
        tsl2561.measure();
        brightness100 = tsl2561.brightnessLux();
#elif defined SENSOR_BH1750
        bh1750.measure();
        brightness100 = bh1750.brightnessLux();
#endif

//#ifdef SENSOR_DIGINPUT
//        digInputState = digitalInput.pinState();
//#endif

#ifdef SENSOR_VEML6070
        veml6070.measure();
        // Beispiel custom payload, 4bit für UV-Index (integer 0..11)
        uint8_t uvi = veml6070.uvIndex();
        customData &= 0xFFF0;
        customData |= (uvi & 0x0F);
#endif

#ifdef SENSOR_VEML6075
        veml6075.measure();
        // Beispiel custom payload, 8bit für UV-Index * 10 (integer 0..110, 1 Kommastelle)
        uint8_t uvi10 = veml6075.uvIndex10();
        customData &= 0xFF00;
        customData |= uvi10;
#endif

        batteryVoltage = device().battery().current();    // BatteryTM class, mV resolution
    }

    void initSensors()
    {
#ifdef SENSOR_DS18X20
        ds18x20.init(ONEWIRE_PIN);
#endif
#ifdef SENSOR_BME280
        bme280.init();
#endif
#ifdef SENSOR_BMP180
        bmp180.init();
#endif
#ifdef SENSOR_MAX44009
        max44009.init();
#endif
#ifdef SENSOR_TSL2561
        tsl2561.init();
#endif
#ifdef SENSOR_BH1750
        bh1750.init();
#endif
#ifdef SENSOR_SHT31
        sht31.init();
#endif
#ifdef SENSOR_SHT21
        sht21.init();
#endif
#ifdef SENSOR_SHT10
#if defined SENSOR_BME280 || defined SENSOR_BMP180 || defined SENSOR_MAX44009 || defined SENSOR_TSL2561 || defined SENSOR_BH1750                     \
    || defined SENSOR_VEML6070 || defined SENSOR_VEML6075
        sht10.i2cEnableSharedAccess();    // falls I2C Sensoren vorhanden dies dem SHT10 mitteilen
#endif
        sht10.init();
#endif
//#ifdef SENSOR_DIGINPUT
//        digitalInput.init(DIGINPUT_PIN);
//#endif
#ifdef SENSOR_VEML6070
        veml6070.init();
#endif
#ifdef SENSOR_VEML6075
        veml6075.init();
#endif
        DPRINTLN(F("Sensor setup done"));
        DPRINT(F("Serial: "));
        DPRINTLN(cDEVICE_SERIAL);
#ifdef CLOCK_SYSCLOCK
        DPRINTLN(F("Clock SYSCLOCK"));
#elif defined CLOCK_RTC
        DPRINTLN(F("Clock RTC"));
#endif
    }

    void setup(Device<Hal, SensorList0>* dev, uint8_t number, uint16_t addr)
    {
        Channel::setup(dev, number, addr);
        initSensors();
        set(seconds2ticks(5));    // first message in 5 sec.
        CLOCK.add(*this);
    }

    void configChanged()
    {
        // DPRINTLN(F("Config changed: List1"));
    }

    uint8_t status() const { return 0; }

    uint8_t flags() const { return 0; }
};

class SensChannelDevice : public MultiChannelDevice<Hal, WeatherChannel, 1, SensorList0> {
public:
    typedef MultiChannelDevice<Hal, WeatherChannel, 1, SensorList0> TSDevice;
    SensChannelDevice(const DeviceInfo& info, uint16_t addr)
        : TSDevice(info, addr)
    {
    }
    virtual ~SensChannelDevice() {}

    virtual void configChanged()
    {
        TSDevice::configChanged();
        DPRINTLN(F("Config Changed: List0"));

        uint8_t ledMode = this->getList0().ledMode();
        DPRINT(F("ledMode: "));
        DDECLN(ledMode);

        uint8_t lowBatLimit = this->getList0().lowBatLimit();
        DPRINT(F("lowBatLimit: "));
        DDECLN(lowBatLimit);
        battery().low(lowBatLimit);

        uint8_t txDevTryMax = this->getList0().transmitDevTryMax();
        DPRINT(F("transmitDevTryMax: "));
        DDECLN(txDevTryMax);

        uint16_t updCycle = this->getList0().updIntervall();
        DPRINT(F("updCycle: "));
        DDECLN(updCycle);

        uint16_t altitude = this->getList0().altitude();
        DPRINT(F("altitude: "));
        DDECLN(altitude);
    }
};

SensChannelDevice               sdev(devinfo, 0x20);
ConfigButton<SensChannelDevice> cfgBtn(sdev);

void setup()
{
    DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
    sdev.init(hal);
    buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
    sdev.initDone();
}

void loop()
{
    bool worked = hal.runready();
    bool poll   = sdev.pollRadio();
    if (worked == false && poll == false) {
//#ifdef SENSOR_DIGINPUT
//        if (digitalInput.notifyEvent()) {
//            digitalInput.resetEvent();
//            DPRINTLN(F("DIGINPUT change"));
//            sdev.channel(1).forceSend();
//        }
//#endif
        // deep discharge protection
        // if we drop below critical battery level - switch off all and sleep forever
        if (hal.battery.critical()) {
            // this call will never return
            hal.activity.sleepForever(hal);
        }
        // if nothing to do - go sleep
        hal.activity.savePower<SAVEPWR_MODE>(hal);
    }
}
Sketch neu aufgespielt, Sensoren in Homematic vorher gelöscht und anschließend neu angelernt. Die neu erstellte .xml Datei in das vorher umbenannte Verzeichniss customized_firmware eingespielt und neu gestartet. Klappt irgendwie aber nicht wirklich. Wo ist mein "Denkfehler" oder kann man es so gar nicht machen? Muss dazu sagen das ich vom Programmieren so gut wie keine Ahnung habe und ich es nur durch testen rausfinden kann.

@ TomMajor oder
@ jp112sdl

könntet bitte einer von beiden mal eine Beispieldatei hier reinstellen wie es denn "Richtig" sein muss das man eben die zweite Temperatur auch mit angezeigt bekommt? Vielen Dank schonmal.

PS: habe den Sketch nochmals geändert, anstatt temperature nun temp1 eingetragen. Muss ich aber erstnochmal testen ob es was gebracht hat.

PSS: bin nun etwas weiter gekommen. im customized_firmware Ordner habe ich die .xml jetzt folgenermaßen abgeändert

Code: Alles auswählen

<?xml version="1.0" encoding="iso-8859-1"?>
<device version="2" rx_modes="CONFIG,WAKEUP,LAZY_CONFIG" cyclic_timeout="45000">
  <supported_types>
    <type name="HB-UNI-Sensor1" id="HB-UNI-Sensor1" updatable="true">
      <parameter index="9.0" size="1.0" cond_op="E" const_value="0x13" />
      <parameter index="10.0" size="2.0" const_value="0xF103" />
    </type>
  </supported_types>
  <paramset type="MASTER" id="hm_uni_sen_dev_master">
    <parameter id="DEVICE_LED_MODE">
      <logical type="option">
        <option id="OFF" />
        <option id="ON" default="true" />
      </logical>
      <physical type="integer" interface="config" list="0" index="5.6" size="0.2" />
      <conversion type="integer_integer_map">
        <value_map device_value="0x00" parameter_value="0" />
        <value_map device_value="0x01" parameter_value="1" />
      </conversion>
    </parameter>
    <parameter id="LOW_BAT_LIMIT">
      <logical type="float" min="0.9" max="5.0" default="2.2" unit="V" />
      <physical type="integer" interface="config" list="0" index="18" size="1" />
      <conversion type="float_integer_scale" factor="10" />
    </parameter>
    <parameter id="TRANSMIT_DEV_TRY_MAX">
      <logical type="integer" min="1" max="10" default="6" />
      <physical type="integer" interface="config" list="0" index="20" size="1" />
    </parameter>
    <parameter id="Sendeintervall">
      <logical type="integer" min="60" max="43200" default="600" unit="s" />
      <physical type="integer" interface="config" list="0" index="32" size="2" />
    </parameter>
    <parameter id="Hoehe ueber NN">
      <logical type="integer" min="0" max="10000" default="0" unit="m" />
      <physical type="integer" interface="config" list="0" index="34" size="2" />
    </parameter>
  </paramset>
  <channels>
    <channel index="0" type="MAINTENANCE" ui_flags="internal" class="maintenance" count="1">
      <paramset type="MASTER" id="maint_ch_master" />
      <paramset type="VALUES" id="maint_ch_values">
        <parameter id="UNREACH" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="UNREACH" />
        </parameter>
        <parameter id="STICKY_UNREACH" operations="read,write,event" ui_flags="service,sticky">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="STICKY_UNREACH" />
        </parameter>
        <parameter id="CONFIG_PENDING" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="CONFIG_PENDING" />
        </parameter>
        <parameter id="LOWBAT" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="LOWBAT" />
        </parameter>
        <parameter id="RSSI_DEVICE" operations="read,event">
          <logical type="integer" />
          <physical type="integer" interface="internal" value_id="RSSI_DEVICE" />
        </parameter>
        <parameter id="RSSI_PEER" operations="read,event">
          <logical type="integer" />
          <physical type="integer" interface="internal" value_id="RSSI_PEER" />
        </parameter>
        <parameter id="DEVICE_IN_BOOTLOADER" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="DEVICE_IN_BOOTLOADER" />
        </parameter>
        <parameter id="UPDATE_PENDING" operations="read,event" ui_flags="service">
          <logical type="boolean" />
          <physical type="integer" interface="internal" value_id="UPDATE_PENDING" />
        </parameter>
      </paramset>
    </channel>
    <channel index="1" type="WEATHER" autoregister="true">
      <link_roles>
        <source name="WEATHER_TH" />
      </link_roles>
      <paramset type="MASTER" id="HB-UNI-Sensor1_master" />
      <paramset type="VALUES" id="HB-UNI-Sensor1_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="AIR_PRESSURE" operations="read,event">
          <logical type="float" min="500.0" max="1100.0" unit="hPa" />
          <physical type="integer" interface="command" value_id="AIR_PRESSURE">
            <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>
          <description>
            <field id="AutoconfRoles" value="WEATHER" />
          </description>
        </parameter>
        <parameter id="LUX" operations="read,event">
          <logical type="float" min="0.00" max="200000.00" unit="Lux" />
          <physical type="integer" interface="command" value_id="LUX" no_init="true">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="100.0" />
        </parameter>
        <parameter id="Wassertemperatur" operations="read,event">
          <logical type="float" min="0.0" max="35.0" unit="°C" />
          <physical type="integer" interface="command" value_id="Wassertemperatur">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="10.0" />
          <description>
            <field id="AutoconfRoles" value="WEATHER" />
          </description>
        </parameter>
        <parameter id="OPERATING_VOLTAGE" operations="read,event">
          <logical type="float" min="0.5" max="5.5" unit="V" />
          <physical type="integer" interface="command" value_id="OPERATING_VOLTAGE">
            <event frame="WEATHER_EVENT" />
          </physical>
          <conversion type="float_integer_scale" factor="1000.0" />
        </parameter>
      </paramset>  
      <paramset type="LINK" id="HB-UNI-Sensor1_link"></paramset>
    </channel>
  </channels>
  <frames>
    <frame id="WEATHER_EVENT" direction="from_device" event="true" fixed_channel="1" type="0x70">
      <parameter type="integer" signed="true"  index="9"  size="1.7" param="TEMPERATURE" />
      <parameter type="integer" index="11" size="2.0" param="AIR_PRESSURE" />
      <parameter type="integer" index="13" size="1.0" param="HUMIDITY" />
      <parameter type="integer" index="14" size="4.0" param="LUX" />
      <parameter type="integer" index="18" size="1.0" param="Wassertemperatur" />
      <parameter type="integer" index="19" size="2.0" param="OPERATING_VOLTAGE" />
    </frame>
  </frames>
  <paramset_defs></paramset_defs>
</device>


Jetzt wird die Wassertemperatur angezeigt, allerdings stimmt der Wert nicht. Wie oder was muss dazu noch geändert werden , so das die Temperatur vom angeschlossenen DS18B20 angezeigt wird? Und noch paar weitere Fragen, wie bekommt man denn die [ und ] weg von der Wassertemperatur? Und wenn ich einen zweiten unisensor verwende (einmal am Pool unter der Abdeckung und einmal im Saunavorraum. Hier soll der DS18B20 dann direkt in der Sauna verbaut werden und die Saunatemperatur anzeigen. Sollte dann also beim zweiten Sensor nicht Wassertemperatur sondern Saunatemperatur stehen. Brauche ich dann eine zweite .xml Datei in den customized_firmware Ordner und wie wird dieser dann angesprochen?

Hoffe ich nerve nicht, ist aber alles noch relatives "Neuland " für mich.
Dateianhänge
test2.jpg
test3 im log.jpg
test3 im log.jpg (57.97 KiB) 1667 mal betrachtet

TomMajor
Beiträge: 1793
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: HB-UNI-Sensor1 - Neuauflage

Beitrag von TomMajor » 09.07.2020, 18:41

magnum1795 hat geschrieben:
09.07.2020, 10:34

Jetzt wird die Wassertemperatur angezeigt, allerdings stimmt der Wert nicht. Wie oder was muss dazu noch geändert werden , so das die Temperatur vom angeschlossenen DS18B20 angezeigt wird? Und noch paar weitere Fragen, wie bekommt man denn die [ und ] weg von der Wassertemperatur? Und wenn ich einen zweiten unisensor verwende (einmal am Pool unter der Abdeckung und einmal im Saunavorraum. Hier soll der DS18B20 dann direkt in der Sauna verbaut werden und die Saunatemperatur anzeigen. Sollte dann also beim zweiten Sensor nicht Wassertemperatur sondern Saunatemperatur stehen. Brauche ich dann eine zweite .xml Datei in den customized_firmware Ordner und wie wird dieser dann angesprochen?

Hoffe ich nerve nicht, ist aber alles noch relatives "Neuland " für mich.
Deine Fragen sind normal wenn man anfängt sich mit HomeMatic und xml zu beschäftigen. Bei mir hat das auch gedauert bis ich annähernd verstehe was zu tun ist, und ohne Jerome wäre das nicht gelungen. :D

Wenn du xml und sketche postest wäre es gut nur die Stellen zu posten wo du geändert hast, also ein Diff.

Hast du denn die Wassertemperatur an die entsprechende Stelle in die payload geschrieben?

[] bedeutet RM hat keine Übersetzung gefunden.
param="TEMPERATURE" ist ein CCU nativer Datentyp und wird automatisch übersetzt, param="Wassertemperatur" ist kein nativer.
siehe
https://github.com/TomMajor/SmartHome/t ... enden-kann

Du könntest Wassertemperatur selber übersetzen durch patchen der entsprechenden Language files.
https://github.com/TomMajor/SmartHome/t ... data-types

ich selbst übersetzte nicht mehr da ioBroker die Übersetzungen nicht annimmt..
ich kann z.B. damit leben das beim HB-SEN-LJet Tankinhalt in [] steht. Dafür steht es im ioBroker auch als Tankinhalt. :)
https://github.com/TomMajor/SmartHome/t ... Jet#bilder
Viele Grüße,
Tom

Antworten

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