Giter Club home page Giter Club logo

domoticzebusd's Introduction

ebusd plugin for Domoticz

This is a plugin for Domoticz, for Domoticz to communicate directly with ebusd daemon. Ebus is a protocol to communicate mainly with Vaillant and Saunier-Duval boilers.

Warning

This is a hobby project, use it if you know what you are doing and at your own risks, I cannot be held responsible for toying and erasing your boiler configuration or breaking your underfloor heating system. I strongly advise to install an hardware protection device for your underfloor heating system, for instance an aquastat on the "burner off" input, that opens at 50°C (protection in case of programming error, or piracy...).

Prerequisites

Domoticz version must be at least 2024.1.

You need to have ebusd daemon installed, maybe you can install a package directly from releases, and you need to install it with its configuration files, accessible from network to Domoticz and obviously, a hardware supported by ebusd. The plugin has been tested with ebusd versions 3.0.595c7c0, 3.4 and 23.3 and a Vaillant ecoTEC plus VUI FR 306/5-5 R5 boiler with a calorMATIC VRC470f wireless remote control and VR61/4 underfloor heating system kit. Check first that ebusd is working properly with the following command directly on the device hosting ebusd:

ebusctl find

Then check that ebusd telnet connection is available from the device hosting Domoticz (change IP address to ebusd hosting device IP address or name, 8888 is default ebusd port, change it to your telnet port number if different):

telnet 192.168.0.10 8888
find
quit

You should get the same list as the previous command.

I advise to limit telnet access on you ebusd hosting device to the device hosting Domoticz, for instance, I added the following to my "/etc/rc.local":

iptables -A INPUT -p tcp ! -s 192.168.0.11 --dport 8888 -j DROP

Change IP address to Domoticz hosting device IP address, change port to your telnet port number if different.

For the plugin to work, ebusd must be started with HTTP JSON --httpport option, for instance on port 8889. I advise to disable update check too. I had to change my "/etc/default/ebusd" after installing the .deb package for raspberry pi:

# /etc/default/ebusd:
# config file for ebusd service.

# Options to pass to ebusd (run "ebusd -?" for more info):
EBUSD_OPTS="--scanconfig --httpport 8889 --updatecheck=off"

Then restart the daemon:

sudo service ebusd restart

Then you can open and see available registers from your favorite internet browser, for instance at this address: http://192.168.0.10:8889/data?def (change IP address to ebusd hosting device IP address or name, change 8889 port to whatever port you configured for HTTP JSON):

{
 "bai": {
  "messages": {
   "AccessoriesOne": {
    "name": "AccessoriesOne",
    "passive": false,
    "write": false,
    "lastup": 0,
    "zz": 8,
    "id": [181, 9, 13, 75, 4],
    "fielddefs": [
     { "name": "", "slave": true, "type": "UCH", "isbits": false, "length": 1, "values": { "1": "circulationpump", "2": "extheatingpump", "3": "storagechargingpump", "4": "fluegasflapextractorhood", "5": "externalgasvalve", "6": "externalerrormessage", "7": "solarpump", "8": "remotecontrol" }, "unit": "", "comment": "Accesory relay 1 function"}
    ]
   },
   "AccessoriesTwo": {
    "name": "AccessoriesTwo",
    "passive": false,
    "write": false,
    "lastup": 0,
    "zz": 8,
    "id": [181, 9, 13, 76, 4],
    "fielddefs": [
     { "name": "", "slave": true, "type": "UCH", "isbits": false, "length": 1, "values": { "1": "circulationpump", "2": "extheatingpump", "3": "storagechargingpump", "4": "fluegasflapextractorhood", "5": "externalgasvalve", "6": "externalerrormessage", "7": "solarpump", "8": "remotecontrol" }, "unit": "", "comment": "Accesory relay 2 function"}
    ]
   },
   "ACRoomthermostat": {
    "name": "ACRoomthermostat",
    "passive": false,
    "write": false,
    "lastup": 0,
    "zz": 8,
    "id": [181, 9, 13, 42, 0],
    "fielddefs": [
     { "name": "onoff", "slave": true, "type": "UCH", "isbits": false, "length": 1, "values": { "0": "off", "1": "on" }, "unit": "", "comment": "External controls heat demand (Clamp 3-4)"}
    ]
   },
   "SetMode": {
    "name": "SetMode",
    "passive": true,
    "write": true,
    "lastup": 1518368270,
    "zz": 8,
    "id": [181, 16, 0],
    "fields": {
     "hcmode": {"value": "auto"},
     "flowtempdesired": {"value": 46.5},
     "hwctempdesired": {"value": 55.0},
     "hwcflowtempdesired": {"value": null},
     "disablehc": {"value": 0},
     "disablehwctapping": {"value": 0},
     "disablehwcload": {"value": 0},
     "remoteControlHcPump": {"value": 0},
     "releaseBackup": {"value": 0},
     "releaseCooling": {"value": 0}
    },
    "fielddefs": [
     { "name": "hcmode", "slave": false, "type": "UCH", "isbits": false, "length": 1, "values": { "0": "auto", "1": "off", "2": "water" }, "unit": "", "comment": "Boiler Modus"},
     { "name": "flowtempdesired", "slave": false, "type": "D1C", "isbits": false, "length": 1, "unit": "°C", "comment": "Temperatur"},
     { "name": "hwctempdesired", "slave": false, "type": "D1C", "isbits": false, "length": 1, "unit": "°C", "comment": "Temperatur"},
     { "name": "hwcflowtempdesired", "slave": false, "type": "UCH", "isbits": false, "length": 1, "unit": "°C", "comment": "Temperatur"},
     { "name": "", "slave": false, "type": "IGN", "isbits": false, "length": 1, "unit": "", "comment": ""},
     { "name": "disablehc", "slave": false, "type": "BI0", "isbits": true, "length": 1, "unit": "", "comment": ""},
     { "name": "disablehwctapping", "slave": false, "type": "BI1", "isbits": true, "length": 1, "unit": "", "comment": ""},
     { "name": "disablehwcload", "slave": false, "type": "BI2", "isbits": true, "length": 1, "unit": "", "comment": ""},
     { "name": "", "slave": false, "type": "IGN", "isbits": false, "length": 1, "unit": "", "comment": ""},
     { "name": "remoteControlHcPump", "slave": false, "type": "BI0", "isbits": true, "length": 1, "unit": "", "comment": ""},
     { "name": "releaseBackup", "slave": false, "type": "BI1", "isbits": true, "length": 1, "unit": "", "comment": ""},
     { "name": "releaseCooling", "slave": false, "type": "BI2", "isbits": true, "length": 1, "unit": "", "comment": ""}
    ]
...

Installing

Copy the plugin.py to domoticz directory/plugins/DomoticzEbusd or change directory to domoticz directory/plugins and issue the following command:

git clone https://github.com/guillaumezin/DomoticzEbusd

To update, overwrite plugin.py or change directory to domoticz directory/plugins/DomoticzEbusd and issue the following command:

git pull

Restart Domoticz.

If you don't see the plugin in the hardware configuration tab, give for everyone read permission to plugin and read and execute permission for directory, for Linux:

cd whatever/plugins
chmod ugo+rx DomoticzEbusd
chmod ugo+r DomoticzEbusd/plugin.py

Restart Domoticz.

Configuration

Add the ebusd-bridge hardware in Domoticz hardware configuration tab, giving the ebusd hosting device IP address or name, the telnet port, the HTTP JSON port, the registers, and set the refresh rate, read-only mode and debug mode. The refresh rate reads the registers values at the given rate in seconds.

The registers parameter can be left empty. In that case, the plugin will create devices for every register if read-only parameter is set to one of the "add discovered devices" choices and they will be added to Setup / Devices as unused, you will have to set the devices you're interested into as used. You can have a look to Setup / Log / Status tab the see created registers. However it is recommended to limit to useful registers. It is advised to create a first hardware with empty registers parameter, then to restart Domoticz, to look at devices created and to keep only useful registers by creating a new ebusd-bridge hardware with registers filled-in then to delete the first ebusd-bridge hardware. You can also change the read-only parameter to one of the "don't add discovered devices" then delete useless devices.

You can add many registers separated by space. Registers preceded with character ! will be excluded. The register names have following convention:

broadcast:outsidetemp: bai:SetMode:hcmode bai:SetMode:2 bai:SetMode:hwcflowtempdesired f47:RoomTemp:0 f47:Hc1OPMode: mc:InternalOperatingMode470: mc:Flow1Sensor: mc:FlowTempDesired: bai:FlowTemp: bai:ReturnTemp: bai:FlowTempDesired: bai:StorageTemp: f47:Hc1SFMode: f47:Hc2SFMode: bai:WaterPressure: f47:Hc1HolidayStartPeriod: f47:Hc1HolidayEndPeriod: f47:Hc2HolidayStartPeriod: f47:Hc2HolidayEndPeriod: !:sensor$

This is case insensitive. If you specify filters, corresponding devices will be set as used directly. The first part of a register is the circuit name, the second part must be a message name (third level of JSON data), and the third part is the index, or the name (possible only if different than "") of field in fielddefs of a message in JSON data.

For instance bai:SetMode:2 in my case gives hwctempdesired fielddefs value, i.e. the desired hot water temperature, because it is the second field of bai->messages->SetMode register. It could have been configured with bai:SetMode:hwctempdesired directly. Fielddefs type "IGN" are ignored for index counting and name searching. For instance bai:SetMode:4 give the same result as bai:SetMode:disablehc.

The search is based on Python regular expression, meaning for instance that:

  • flow will match all registers containing flow in any position of the complete register name (all fields of mc:Flow1Sensor:, mc:FlowTempDesired:, bai:FlowTemp:, bai:FlowTempDesired plus bai:SetMode:hwcflowtempdesired
  • broadcast:outsidetemp: will match all fields of message outsidetemp of circuit broadcast
  • ^f47:hc will match all fields of all message names beginning with hc of circuit f47 (all fields of f47:Hc1OPMode:, f47:Hc1SFMode: and f47:Hc2SFMode:)
  • ^f47:.*temp.* will match all fields of all message names containing temp for circuit f47 (f47:RoomTemp:)
  • :.*period: will match every messages ending with period (all fields of f47:Hc1HolidayStartPeriod:, f47:Hc1HolidayEndPeriod:, f47:Hc2HolidayStartPeriod:, f47:Hc2HolidayEndPeriod:)
  • :hwcflowtempdesired$ will match all registers with a field named hwcflowtempdesired (bai:SetMode:hwcflowtempdesired)
  • !:sensor$ will exclude all registers with a field named sensor

You can add more than one ebusd-bridge hardware to Domoticz, for instance to get some registers as read-only and others as writable.

In case of troubles, check that "Accept new Hardware Devices" is enabled, at least temporaly (in Setup / Settings / System / Hardware/Devices).

Particular case of holiday mode

Holiday mode can be activated only by setting a start and end date. If you set "holiday" to Hc1SFMode or Hc2SFMode, it won't be effective. Domoticz doesn't handle date devices, so f47:Hc1HolidayStartPeriod f47:Hc1HolidayEndPeriod f47:Hc2HolidayStartPeriod f47:Hc2HolidayEndPeriod will appear as read-only text devices. To set holiday mode from Domoticz, you can create a virtual switch and create a Lua or dzVents script, here is an example where "Holiday mode" is a virtual switch:

return {
	on = {
		devices = {
			'Holiday mode'
		}
	},
	execute = function(domoticz, device)
		domoticz.log('Device ' .. device.name .. ' was changed', domoticz.LOG_ERROR)
	        if (device.active) then
	            domoticz.devices("ebusd bridge - f47:hc1holidaystartperiod - date").update(0, "01.01.2010")
	            domoticz.devices("ebusd bridge - f47:hc2holidaystartperiod - date").update(0, "01.01.2010")
	            domoticz.devices("ebusd bridge - f47:hc1holidayendperiod - date").update(0, "01.01.2090")
	            domoticz.devices("ebusd bridge - f47:hc2holidayendperiod - date").update(0, "01.01.2090")
	        else
	            domoticz.devices("ebusd bridge - f47:hc1holidaystartperiod - date").update(0, "01.01.2010")
	            domoticz.devices("ebusd bridge - f47:hc2holidaystartperiod - date").update(0, "01.01.2010")
	            domoticz.devices("ebusd bridge - f47:hc1holidayendperiod - date").update(0, "01.01.2010")
	            domoticz.devices("ebusd bridge - f47:hc2holidayendperiod - date").update(0, "01.01.2010")
	       end
	end
}

Now you can set "On" and "Off", even using Timers, on "Holiday mode" virtual switch, to disable heating circuits. Hot water production will be disabled automatically when all heating circuits are in holiday mode with my calorMATIC VRC470f control. This will work with Domoticz from version 3.9415 onwards, because on earlier version, update() methods from Lua and dzVents event scripts are not passed to python plugins.

Script examples

dzVents script to automatically switch from summer mode to auto mode

-- temperature to decide summer mode
highTempLevel = 20
-- temperature to decide winter mode
lowTempLevel = highTempLevel - 4
-- consecutive days to watch
nDaysToWatch = 3
-- temperature device
temperatureDevice = "Température extérieure"
-- heating device 1
heating1Device = "Mode chauffage RDC"
-- heating device 2
heating2Device = "Mode chauffage étage"
-- selector switch level for summer mode
summerModeLevel = 40
-- selector switch level for winter mode
winterModeLevel = 10

return {
	on = {
		timer = {
		    "at 20:00"
		},
	},
	data = {
	    history = { initial = 0 },
	    mode  = { initial = -1 }
	},
	execute = function(domoticz, item)
    	temperature = domoticz.devices(temperatureDevice).temperature
    	if (domoticz.data.mode == winterModeLevel) then
    	    if (temperature >= highTempLevel) then
    	        if domoticz.data.history < nDaysToWatch then
    	            domoticz.data.history = domoticz.data.history + 1
    	            if domoticz.data.history == nDaysToWatch then
                	    domoticz.log("Switching heating to summer mode")
                	    domoticz.data.mode = summerModeLevel
            	        domoticz.data.history = 0
                		domoticz.devices(heating1Device).switchSelector(domoticz.data.mode)
                		domoticz.devices(heating2Device).switchSelector(domoticz.data.mode)
    	            end
                end
    	    else
    	        domoticz.data.history = 0
            end
        else
    	    if (temperature <= lowTempLevel) then
    	        if domoticz.data.history < nDaysToWatch then
    	            domoticz.data.history = domoticz.data.history + 1
    	            if domoticz.data.history == nDaysToWatch then
                	    domoticz.log("Switching heating to winter mode")
                	    domoticz.data.mode = winterModeLevel
            	        domoticz.data.history = 0
                		domoticz.devices(heating1Device).switchSelector(domoticz.data.mode)
                		domoticz.devices(heating2Device).switchSelector(domoticz.data.mode)
    	            end
                end
	        else
   	            domoticz.data.history = 0
            end
	    end
    end
}

Install Domoticz and Ebusd with docker compose

Docker compose is a convenient way to install and execute Domoticz and Ebusd together.

The following docker-compose.yml file gives an example to install Ebusd with the "docker compose build" command:

version: "3"
services:
    ebusd:
        container_name: ebusd
        volumes:
            - ./config:/opt/config
            - /dev:/host_dev
        ports:
            - "127.0.0.1:8888:8888"
            - "8889:8889"
        environment:
            - EBUSD_SCANCONFIG
            - EBUSD_DEVICE=/dev/ttyUSB0
            - EBUSD_CONFIGLANG=en
            - EBUSD_LOG=all error
            - EBUSD_HTTPORT=8889            
            - EBUSD_UPDATECHECK=off
        image: john30/ebusd
        networks:
            - ebusd

networks:
  ebusd:
    name: ebusd
    driver: bridge
    attachable: true

Please note that with this configuration, to access to telnet prompt, this will only possible from the machine executing docker. The address in plugin parameters will have to be the external IP address of the machine executing docker, for instance 192.168.1.100, the address 127.0.0.1 will not work.

The following docker-compose.yml file example indicates how to put ebusd and domoticz in a private network:

version: '3'
  ebusd:
    container_name: ebusd
    volumes:
        - ../ebusd-docker-compose/config:/opt/config
    ports:
        - "127.0.0.1:8888:8888"
    expose:
        - "8889"
    environment:
        - EBUSD_SCANCONFIG
        - EBUSD_DEVICE=/dev/ttyUSB0
        - EBUSD_CONFIGLANG=en
        - EBUSD_LOG=all error
        - EBUSD_HTTPPORT=8889
        - EBUSD_UPDATECHECK=off
    image: john30/ebusd
    networks:
        - domoticz

  domoticz:
    image: domoticz/domoticz:2024.1
    container_name: domoticz
    depends_on:
      - ebusd
    ports:
      - "8080:8080"
      - "443:443"
    volumes:
      - ./config:/opt/domoticz/userdata
    environment:
      - TZ=Europe/Paris
      #- LOG_PATH=/opt/domoticz/userdata/domoticz.log
    networks:
      - domoticz

networks:
  domoticz:
    name: domoticz
    driver: bridge

../ebusd-docker-compose/config must be created, to contain ebusd config. ./config must be created to contain Domoticz config. ./config/plugins is the directory to put Domoticz plugins. Please note that with this configuration, to access to telnet prompt, this will only possible from the machine executing docker and only Domoticz will be able to access 8889 port. The address in plugin parameters will have to be "ebusd".

Authors

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT license - see the LICENSE file for details

Acknowledgments

  • John30 for ebusd
  • Domoticz team

domoticzebusd's People

Contributors

guillaumezin avatar szczukot avatar z1mek avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

domoticzebusd's Issues

EUSB: Impossible to parse JSON

Domoticz gives this error:

2024-07-10 22:22:00.359 Error: EUSB: Impossible to parse JSON (buffer size 327713). Traceback (most recent call last): File "/home/domo_user/domoticz/plugins/ebusd/plugin.py", line 342, in parseJson dJson = json.loads(sData, object_pairs_hook= lambda dict: CaseInsensitiveDict(dict)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/json/init.py", line 359, in loads return cls(**kw).decode(s) ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/json/decoder.py", line 353, in raw_decode obj, end = self.scan_once(s, idx) ^^^^^^^^^^^^^^^^^^^^^^ json.decoder.JSONDecodeError: Invalid control character at: line 7154 column 19 (char 327595)

'CDevice_update' failed 'OverflowError':'Python int too large to convert to C long'.

System can not get value from bai prenergysumhc1
current value is:2153635038
Is too big for domoticz?

2019-03-04 21:54:52.697 (Saunier Duval ) Handle
2019-03-04 21:54:52.697 (Saunier Duval ) Telnet write: read -f -v -c bai prenergysumhc1


2019-03-04 21:54:52.697 (Saunier Duval ) Pushing 'WriteDirective' on to queue
2019-03-04 21:54:52.697 (Saunier Duval ) Processing 'WriteDirective' message
2019-03-04 21:54:52.697 (Saunier Duval ) Sending 35 bytes of data
2019-03-04 21:54:52.698 (Saunier Duval ) 72 65 61 64 20 2d 66 20 20 2d 76 20 2d 63 20 62 61 69 20 70 read.-f..-v.-c.bai.p
2019-03-04 21:54:52.698 (Saunier Duval ) 72 65 6e 65 72 67 79 73 75 6d 68 63 31 0d 0a .. .. .. .. .. renergysumhc1..
2019-03-04 21:54:52.733 (Z-Wave) Usage (Unknown)
2019-03-04 21:54:52.738 (Z-Wave) General/kWh (kWh Meter)
2019-03-04 21:54:52.784 (Z-Wave) General/Voltage (Voltage)
2019-03-04 21:54:52.793 (Saunier Duval ) Pushing 'ReadEvent' on to queue
2019-03-04 21:54:52.799 (Saunier Duval ) Processing 'ReadEvent' message
2019-03-04 21:54:52.799 (Saunier Duval ) Received 32 bytes of data
2019-03-04 21:54:52.799 (Saunier Duval ) 62 61 69 20 50 72 45 6e 65 72 67 79 53 75 6d 48 63 31 20 3d bai.PrEnergySumHc1.=
2019-03-04 21:54:52.799 (Saunier Duval ) 32 31 35 33 36 33 35 30 33 38 0a 0a .. .. .. .. .. .. .. .. 2153635038..
2019-03-04 21:54:52.799 (Saunier Duval ) Pushing 'onMessageCallback' on to queue
2019-03-04 21:54:52.799 (Saunier Duval ) Processing 'onMessageCallback' message
2019-03-04 21:54:52.800 (Saunier Duval ) Calling message handler 'onMessage'.
2019-03-04 21:54:52.800 (Saunier Duval ) onMessage called
2019-03-04 21:54:52.800 (Saunier Duval ) Parse telnet buffer size 32
2019-03-04 21:54:52.800 (Saunier Duval ) Reveived value: 'bai PrEnergySumHc1 =2153635038'
2019-03-04 21:54:52.801 (Saunier Duval ) Save whole fields values 2153635038
2019-03-04 21:54:52.801 Error: (CDevice_update) bai:prenergysumhc1: Failed to parse parameters: 'nValue', 'sValue', 'Image', 'SignalLevel', 'BatteryLevel', 'Options', 'TimedOut', 'Name', 'TypeName', 'Type', 'Subtype', 'Switchtype', 'Used', 'Description', 'Color' or 'SuppressTriggers' expected.
2019-03-04 21:54:52.801 Error: (Saunier Duval ) 'CDevice_update' failed 'OverflowError':'Python int too large to convert to C long'.
2019-03-04 21:54:52.802 (Saunier Duval ) handleFifo() called
2019-03-04 21:54:52.802 (Saunier Duval ) Handle
2019-03-04 21:54:52.802 (Saunier Duval ) Telnet write: read -f -v -c bai hwcwaterflow

Python errors with Domoticz V4.10228

Hi, I have used DomoticzEbusd a while with Domoticz 9700. Now I needed to upgrade to the latest version V4.10228 (for other reasons). Unfortunately, the Vaillant plugin now throws the following errors:

2018-11-25 14:47:25.292 Error: (Vaillant) ----> Line 903 in 'C:\Program Files (x86)\Domoticz\plugins\DomoticzEbusd-master\plugin.py'
2018-11-25 14:47:25.292 Error: (Vaillant) ----> Line 688 in 'C:\Program Files (x86)\Domoticz\plugins\DomoticzEbusd-master\plugin.py'
2018-11-25 14:47:25.292 Error: (Vaillant) ----> Line 371 in 'C:\Program Files (x86)\Domoticz\plugins\DomoticzEbusd-master\plugin.py'
2018-11-25 14:47:25.292 Error: (Vaillant) ----> Line 367 in 'C:\Program Files (x86)\Python36-32\Lib\json_init_.py'
2018-11-25 14:47:25.292 Error: (Vaillant) ----> Line 339 in 'C:\Program Files (x86)\Python36-32\Lib\json\decoder.py'
2018-11-25 14:47:25.292 Error: (Vaillant) ----> Line 357 in 'C:\Program Files (x86)\Python36-32\Lib\json\decoder.py'

Any idea, what the reason could be?

Many thanks and kind regards,

Jens

CDevice_init' failed 'TypeError':''Description' is an invalid keyword argument for this function

Hi !

Thanks for the good work and this plugin ! Everything is almost fine, just having an issue when processing data in Domoticz, any clue ?

2018-04-10 22:48:15.848 (Chaudière) Calling message handler 'onMessage'.
2018-04-10 22:48:15.848 (Chaudière) onMessage called
2018-04-10 22:48:15.848 (Chaudière) Good Response received from ebusd : length 73445
2018-04-10 22:48:15.976 (Chaudière) Look for circuit bai register flowtemp in JSON data
2018-04-10 22:48:15.976 (Chaudière) Circuit bai found
2018-04-10 22:48:15.976 (Chaudière) Register flowtemp found
2018-04-10 22:48:15.976 (Chaudière) Found
2018-04-10 22:48:15.976 (Chaudière) Field set to 0 by default
2018-04-10 22:48:15.977 (Chaudière) Field is type temperature
2018-04-10 22:48:15.977 Error: Expected: myVar = Domoticz.Device(Name="myDevice", Unit=0, TypeName="", Type=0, Subtype=0, Switchtype=0, Image=0, Options={}, Used=1)
2018-04-10 22:48:15.977 Error: (Chaudière) 'CDevice_init' failed 'TypeError':''Description' is an invalid keyword argument for this function'.
2018-04-10 22:48:15.977 Error: Device creation failed, Device object is not associated with a plugin.
2018-04-10 22:48:15.977 Error: (Chaudière) Cannot add device bai:flowtemp (bai:flowtemp:0) unit 1. Check in settings that Domoticz is set up to accept new devices
2018-04-10 22:48:15.984 (Chaudière) Calling message handler 'onDisconnect'.
2018-04-10 22:48:15.984 (Chaudière) onDisconnect called 

Error: (EBusD) Impossible to parse JSON (buffer size 30122)

Hello,

I am facing similar issues like #7 :

2020-03-30 11:50:12.004 Error: (EBusD) Impossible to parse JSON (buffer size 30122). Traceback (most recent call last):
2020-03-30 11:50:12.004 File "/opt/domoticz/plugins/ebus/plugin.py", line 380, in parseJson
2020-03-30 11:50:12.004 dJson = json.loads(sData, object_pairs_hook= lambda dict: CaseInsensitiveDict(dict))
2020-03-30 11:50:12.004 File "/usr/lib/python3.7/json/__init__.py", line 361, in loads
2020-03-30 11:50:12.004 return cls(**kw).decode(s)
2020-03-30 11:50:12.004 File "/usr/lib/python3.7/json/decoder.py", line 337, in decode
2020-03-30 11:50:12.004 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
2020-03-30 11:50:12.004 File "/usr/lib/python3.7/json/decoder.py", line 353, in raw_decode
2020-03-30 11:50:12.004 obj, end = self.scan_once(s, idx)
2020-03-30 11:50:12.004 json.decoder.JSONDecodeError: Expecting ',' delimiter: line 181 column 86 (char 7888) 

ebusd version: 3.4.v3.4-14-gfb32960
Domoticz version: 2020.1
dzVents Version: 3.0.1
Python Version: 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0]

Let me know, if you need the complete JSON or any other information.

Can you help me?

Regards,
David

(ebusd) Impossible to parse JSON, got exception name 'ValueError' is not defined

Hi,

i get the following exception:
(ebusd) Impossible to parse JSON, got exception name 'ValueError' is not defined

Detailed Debug Log:

2020-02-19 17:27:19.323 Status: (ebusd) Started. 2020-02-19 17:27:19.562 Status: (ebusd) Entering work loop. 2020-02-19 17:27:19.563 Status: (ebusd) Initialized version 1.4.0, author 'Barberousse' 2020-02-19 17:27:19.847 Error: (ebusd) Impossible to parse JSON, got exception name 'ValueError' is not defined 2020-02-19 17:27:29.864 (ebusd) 35 35 2c 20 33 39 5d 2c 0a 20 20 20 20 22 66 69 65 6c 64 73 55,.39],....."fields 2020-02-19 17:27:29.864 (ebusd) 22 3a 20 7b 0a 20 20 20 20 20 22 75 6e 32 38 22 3a 20 7b 22 ":.{......"un28":.{" 2020-02-19 17:27:29.864 (ebusd) 76 61 6c 75 65 22 3a 20 31 7d 0a 20 20 20 20 7d 2c 0a 20 20 value":.1}.....},... 2020-02-19 17:27:29.865 (ebusd) 20 20 22 66 69 65 6c 64 64 65 66 73 22 3a 20 5b 0a 20 20 20 .."fielddefs":.[.... 2020-02-19 17:27:29.865 (ebusd) 20 20 7b 20 22 6e 61 6d 65 22 3a 20 22 75 6e 32 38 22 2c 20 ..{."name":."un28",. 2020-02-19 17:27:29.865 (ebusd) 22 73 6c 61 76 65 22 3a 20 74 72 75 65 2c 20 22 74 79 70 65 "slave":.true,."type 2020-02-19 17:27:29.865 (ebusd) 22 3a 20 22 55 49 4e 22 2c 20 22 69 73 62 69 74 73 22 3a 20 ":."UIN",."isbits":. 2020-02-19 17:27:29.865 (ebusd) 66 61 6c 73 65 2c 20 22 6c 65 6e 67 74 68 22 3a 20 32 2c 20 false,."length":.2,. 2020-02-19 17:27:29.865 (ebusd) 22 75 6e 69 74 22 3a 20 22 43 22 2c 20 22 63 6f 6d 6d 65 6e "unit":."C",."commen 2020-02-19 17:27:29.865 (ebusd) 74 22 3a 20 22 74 31 22 7d 0a 20 20 20 20 5d 0a 20 20 20 7d t":."t1"}.....]....} 2020-02-19 17:27:29.865 (ebusd) 2c 0a 20 20 20 22 75 6e 6b 6e 6f 77 6e 32 39 22 3a 20 7b 0a ,...."unknown29":.{. 2020-02-19 17:27:29.865 (ebusd) 20 20 20 20 22 6e 61 6d 65 22 3a 20 22 75 6e 6b 6e 6f 77 6e ...."name":."unknown 2020-02-19 17:27:29.865 (ebusd) 32 39 22 2c 0a 20 20 20 20 22 70 61 73 73 69 76 65 22 3a 20 29",....."passive":. 2020-02-19 17:27:29.865 (ebusd) 74 72 75 65 2c 0a 20 20 20 20 22 77 72 69 74 65 22 3a 20 66 true,....."write":.f 2020-02-19 17:27:29.865 (ebusd) 61 6c 73 65 2c 0a 20 20 20 20 22 6c 61 73 74 75 70 22 3a 20 alse,....."lastup":. 2020-02-19 17:27:29.865 (ebusd) 31 35 38 32 31 32 39 36 30 38 2c 0a 20 20 20 20 22 71 71 22 1582129608,....."qq" 2020-02-19 17:27:29.865 (ebusd) 3a 20 34 38 2c 0a 20 20 20 20 22 7a 7a 22 3a 20 38 2c 0a 20 :.48,....."zz":.8,.. 2020-02-19 17:27:29.865 (ebusd) 20 20 20 22 69 64 22 3a 20 5b 38 30 2c 20 33 34 2c 20 32 30 ..."id":.[80,.34,.20 2020-02-19 17:27:29.865 (ebusd) 34 2c 20 34 35 2c 20 30 5d 2c 0a 20 20 20 20 22 66 69 65 6c 4,.45,.0],....."fiel 2020-02-19 17:27:29.865 (ebusd) 64 73 22 3a 20 7b 0a 20 .. .. .. .. .. .. .. .. .. .. .. .. ds":.{.. 2020-02-19 17:27:29.866 (ebusd) Processing 'ReadEvent' message 2020-02-19 17:27:29.866 (ebusd) Received 1322 bytes of data 2020-02-19 17:27:29.866 (ebusd) 20 20 20 20 22 75 6e 32 39 22 3a 20 7b 22 76 61 6c 75 65 22 ...."un29":.{"value" 2020-02-19 17:27:29.866 (ebusd) 3a 20 31 35 30 7d 0a 20 20 20 20 7d 2c 0a 20 20 20 20 22 66 :.150}.....},....."f 2020-02-19 17:27:29.866 (ebusd) 69 65 6c 64 64 65 66 73 22 3a 20 5b 0a 20 20 20 20 20 7b 20 ielddefs":.[......{. 2020-02-19 17:27:29.866 (ebusd) 22 6e 61 6d 65 22 3a 20 22 75 6e 32 39 22 2c 20 22 73 6c 61 "name":."un29",."sla 2020-02-19 17:27:29.866 (ebusd) 76 65 22 3a 20 74 72 75 65 2c 20 22 74 79 70 65 22 3a 20 22 ve":.true,."type":." 2020-02-19 17:27:29.866 (ebusd) 55 49 4e 22 2c 20 22 69 73 62 69 74 73 22 3a 20 66 61 6c 73 UIN",."isbits":.fals 2020-02-19 17:27:29.866 (ebusd) 65 2c 20 22 6c 65 6e 67 74 68 22 3a 20 32 2c 20 22 75 6e 69 e,."length":.2,."uni 2020-02-19 17:27:29.867 (ebusd) 74 22 3a 20 22 43 22 2c 20 22 63 6f 6d 6d 65 6e 74 22 3a 20 t":."C",."comment":. 2020-02-19 17:27:29.867 (ebusd) 22 74 31 22 7d 0a 20 20 20 20 5d 0a 20 20 20 7d 2c 0a 20 20 "t1"}.....]....},... 2020-02-19 17:27:29.867 (ebusd) 20 22 75 6e 6b 6e 6f 77 6e 33 30 22 3a 20 7b 0a 20 20 20 20 ."unknown30":.{..... 2020-02-19 17:27:29.867 (ebusd) 22 6e 61 6d 65 22 3a 20 22 75 6e 6b 6e 6f 77 6e 33 30 22 2c "name":."unknown30", 2020-02-19 17:27:29.867 (ebusd) 0a 20 20 20 20 22 70 61 73 73 69 76 65 22 3a 20 74 72 75 65 ....."passive":.true 2020-02-19 17:27:29.867 (ebusd) 2c 0a 20 20 20 20 22 77 72 69 74 65 22 3a 20 66 61 6c 73 65 ,....."write":.false 2020-02-19 17:27:29.867 (ebusd) 2c 0a 20 20 20 20 22 6c 61 73 74 75 70 22 3a 20 31 35 38 32 ,....."lastup":.1582 2020-02-19 17:27:29.867 (ebusd) 31 32 39 36 34 35 2c 0a 20 20 20 20 22 71 71 22 3a 20 34 38 129645,....."qq":.48 2020-02-19 17:27:29.867 (ebusd) 2c 0a 20 20 20 20 22 7a 7a 22 3a 20 38 2c 0a 20 20 20 20 22 ,....."zz":.8,....." 2020-02-19 17:27:29.867 (ebusd) 69 64 22 3a 20 5b 38 30 2c 20 33 34 2c 20 32 30 34 2c 20 32 id":.[80,.34,.204,.2 2020-02-19 17:27:29.867 (ebusd) 33 2c 20 33 39 5d 2c 0a 20 20 20 20 22 66 69 65 6c 64 73 22 3,.39],....."fields" 2020-02-19 17:27:29.867 (ebusd) 3a 20 7b 0a 20 20 20 20 20 22 75 6e 33 30 22 3a 20 7b 22 76 :.{......"un30":.{"v 2020-02-19 17:27:29.867 (ebusd) 61 6c 75 65 22 3a 20 33 32 37 36 38 7d 0a 20 20 20 20 7d 2c alue":.32768}.....}, 2020-02-19 17:27:29.867 (ebusd) 0a 20 20 20 20 22 66 69 65 6c 64 64 65 66 73 22 3a 20 5b 0a ....."fielddefs":.[. 2020-02-19 17:27:29.867 (ebusd) 20 20 20 20 20 7b 20 22 6e 61 6d 65 22 3a 20 22 75 6e 33 30 .....{."name":."un30 2020-02-19 17:27:29.867 (ebusd) 22 2c 20 22 73 6c 61 76 65 22 3a 20 74 72 75 65 2c 20 22 74 ",."slave":.true,."t 2020-02-19 17:27:29.868 (ebusd) 79 70 65 22 3a 20 22 55 49 4e 22 2c 20 22 69 73 62 69 74 73 ype":."UIN",."isbits 2020-02-19 17:27:29.868 (ebusd) 22 3a 20 66 61 6c 73 65 2c 20 22 6c 65 6e 67 74 68 22 3a 20 ":.false,."length":. 2020-02-19 17:27:29.868 (ebusd) 32 2c 20 22 75 6e 69 74 22 3a 20 22 43 22 2c 20 22 63 6f 6d 2,."unit":."C",."com 2020-02-19 17:27:29.868 (ebusd) 6d 65 6e 74 22 3a 20 22 74 31 22 7d 0a 20 20 20 20 5d 0a 20 ment":."t1"}.....].. 2020-02-19 17:27:29.868 (ebusd) 20 20 7d 2c 0a 20 20 20 22 75 6e 6b 6e 6f 77 6e 33 31 22 3a ..},...."unknown31": 2020-02-19 17:27:29.868 (ebusd) 20 7b 0a 20 20 20 20 22 6e 61 6d 65 22 3a 20 22 75 6e 6b 6e .{....."name":."unkn 2020-02-19 17:27:29.868 (ebusd) 6f 77 6e 33 31 22 2c 0a 20 20 20 20 22 70 61 73 73 69 76 65 own31",....."passive 2020-02-19 17:27:29.868 (ebusd) 22 3a 20 74 72 75 65 2c 0a 20 20 20 20 22 77 72 69 74 65 22 ":.true,....."write" 2020-02-19 17:27:29.868 (ebusd) 3a 20 66 61 6c 73 65 2c 0a 20 20 20 20 22 6c 61 73 74 75 70 :.false,....."lastup 2020-02-19 17:27:29.868 (ebusd) 22 3a 20 31 35 38 32 31 32 39 36 34 37 2c 0a 20 20 20 20 22 ":.1582129647,....." 2020-02-19 17:27:29.868 (ebusd) 71 71 22 3a 20 34 38 2c 0a 20 20 20 20 22 7a 7a 22 3a 20 38 qq":.48,....."zz":.8 2020-02-19 17:27:29.868 (ebusd) 2c 0a 20 20 20 20 22 69 64 22 3a 20 5b 38 30 2c 20 33 34 2c ,....."id":.[80,.34, 2020-02-19 17:27:29.868 (ebusd) 20 32 30 34 2c 20 32 32 2c 20 33 39 5d 2c 0a 20 20 20 20 22 .204,.22,.39],....." 2020-02-19 17:27:29.868 (ebusd) 66 69 65 6c 64 73 22 3a 20 7b 0a 20 20 20 20 20 22 75 6e 33 fields":.{......"un3 2020-02-19 17:27:29.868 (ebusd) 31 22 3a 20 7b 22 76 61 6c 75 65 22 3a 20 36 35 30 38 38 7d 1":.{"value":.65088} 2020-02-19 17:27:29.868 (ebusd) 0a 20 20 20 20 7d 2c 0a 20 20 20 20 22 66 69 65 6c 64 64 65 .....},....."fieldde 2020-02-19 17:27:29.869 (ebusd) 66 73 22 3a 20 5b 0a 20 20 20 20 20 7b 20 22 6e 61 6d 65 22 fs":.[......{."name" 2020-02-19 17:27:29.869 (ebusd) 3a 20 22 75 6e 33 31 22 2c 20 22 73 6c 61 76 65 22 3a 20 74 :."un31",."slave":.t 2020-02-19 17:27:29.869 (ebusd) 72 75 65 2c 20 22 74 79 70 65 22 3a 20 22 55 49 4e 22 2c 20 rue,."type":."UIN",. 2020-02-19 17:27:29.869 (ebusd) 22 69 73 62 69 74 73 22 3a 20 66 61 6c 73 65 2c 20 22 6c 65 "isbits":.false,."le 2020-02-19 17:27:29.869 (ebusd) 6e 67 74 68 22 3a 20 32 2c 20 22 75 6e 69 74 22 3a 20 22 43 ngth":.2,."unit":."C 2020-02-19 17:27:29.869 (ebusd) 22 2c 20 22 63 6f 6d 6d 65 6e 74 22 3a 20 22 74 31 22 7d 0a ",."comment":."t1"}. 2020-02-19 17:27:29.869 (ebusd) 20 20 20 20 5d 0a 20 20 20 7d 0a 20 20 7d 0a 20 7d 2c 0a 20 ....]....}...}..},.. 2020-02-19 17:27:29.869 (ebusd) 22 67 6c 6f 62 61 6c 22 3a 20 7b 0a 20 20 22 76 65 72 73 69 "global":.{..."versi 2020-02-19 17:27:29.869 (ebusd) 6f 6e 22 3a 20 22 33 2e 34 2e 76 33 2e 33 2d 35 31 2d 67 35 on":."3.4.v3.3-51-g5 2020-02-19 17:27:29.869 (ebusd) 37 65 61 65 30 35 22 2c 0a 20 20 22 75 70 64 61 74 65 63 68 7eae05",..."updatech 2020-02-19 17:27:29.869 (ebusd) 65 63 6b 22 3a 20 22 72 65 76 69 73 69 6f 6e 20 76 33 2e 34 eck":."revision.v3.4 2020-02-19 17:27:29.869 (ebusd) 20 61 76 61 69 6c 61 62 6c 65 2c 20 62 72 6f 61 64 63 61 73 .available,.broadcas 2020-02-19 17:27:29.869 (ebusd) 74 2e 63 73 76 3a 20 64 69 66 66 65 72 65 6e 74 20 76 65 72 t.csv:.different.ver 2020-02-19 17:27:29.869 (ebusd) 73 69 6f 6e 20 61 76 61 69 6c 61 62 6c 65 22 2c 0a 20 20 22 sion.available",..." 2020-02-19 17:27:29.869 (ebusd) 73 69 67 6e 61 6c 22 3a 20 74 72 75 65 2c 0a 20 20 22 73 79 signal":.true,..."sy 2020-02-19 17:27:29.870 (ebusd) 6d 62 6f 6c 72 61 74 65 22 3a 20 35 36 2c 0a 20 20 22 6d 61 mbolrate":.56,..."ma 2020-02-19 17:27:29.870 (ebusd) 78 73 79 6d 62 6f 6c 72 61 74 65 22 3a 20 39 32 2c 0a 20 20 xsymbolrate":.92,... 2020-02-19 17:27:29.870 (ebusd) 22 6d 69 6e 61 72 62 69 74 72 61 74 69 6f 6e 6d 69 63 72 6f "minarbitrationmicro 2020-02-19 17:27:29.870 (ebusd) 73 22 3a 20 32 32 2c 0a 20 20 22 6d 69 6e 61 72 62 69 74 72 s":.22,..."minarbitr 2020-02-19 17:27:29.870 (ebusd) 61 74 69 6f 6e 6d 69 63 72 6f 73 22 3a 20 32 36 2c 0a 20 20 ationmicros":.26,... 2020-02-19 17:27:29.870 (ebusd) 22 6d 69 6e 73 79 6d 62 6f 6c 6c 61 74 65 6e 63 79 22 3a 20 "minsymbollatency":. 2020-02-19 17:27:29.870 (ebusd) 36 2c 0a 20 20 22 6d 61 78 73 79 6d 62 6f 6c 6c 61 74 65 6e 6,..."maxsymbollaten 2020-02-19 17:27:29.870 (ebusd) 63 79 22 3a 20 31 33 2c 0a 20 20 22 71 71 22 3a 20 34 39 2c cy":.13,..."qq":.49, 2020-02-19 17:27:29.870 (ebusd) 0a 20 20 22 72 65 63 6f 6e 6e 65 63 74 73 22 3a 20 30 2c 0a ..."reconnects":.0,. 2020-02-19 17:27:29.870 (ebusd) 20 20 22 6d 61 73 74 65 72 73 22 3a 20 34 2c 0a 20 20 22 6d .."masters":.4,..."m 2020-02-19 17:27:29.870 (ebusd) 65 73 73 61 67 65 73 22 3a 20 31 31 37 2c 0a 20 20 22 6c 61 essages":.117,..."la 2020-02-19 17:27:29.870 (ebusd) 73 74 75 70 22 3a 20 31 35 38 32 31 32 39 36 34 39 0a 20 7d stup":.1582129649..} 2020-02-19 17:27:29.870 (ebusd) 0a 7d .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .} 2020-02-19 17:27:29.871 (ebusd) Pushing 'onMessageCallback' on to queue 2020-02-19 17:27:29.871 (ebusd) Processing 'DisconnectedEvent' message 2020-02-19 17:27:29.871 (ebusd) Disconnect event received for '10.168.2.11:8889'. 2020-02-19 17:27:29.872 (ebusd) Pushing 'onDisconnectCallback' on to queue 2020-02-19 17:27:29.872 (ebusd) Processing 'onMessageCallback' message 2020-02-19 17:27:29.872 (ebusd) Calling message handler 'onMessage'. 2020-02-19 17:27:29.872 (ebusd) onMessage called 2020-02-19 17:27:29.872 (ebusd) Good Response received from ebusd : length 50417 2020-02-19 17:27:29.892 (ebusd) Processing 'onDisconnectCallback' message 2020-02-19 17:27:29.892 (ebusd) Calling message handler 'onDisconnect'. 2020-02-19 17:27:29.892 (ebusd) onDisconnect called 2020-02-19 17:27:29.891 Error: (ebusd) Impossible to parse JSON, got exception name 'ValueError' is not defined 2020-02-19 17:27:59.570 (ebusd) Pushing 'onHeartbeatCallback' on to queue 2020-02-19 17:27:59.607 (ebusd) Processing 'onHeartbeatCallback' message 2020-02-19 17:27:59.607 (ebusd) Calling message handler 'onHeartbeat'. 2020-02-19 17:27:59.608 (ebusd) onHeartbeat() called 2020-02-19 17:28:29.576 (ebusd) Pushing 'onHeartbeatCallback' on to queue 2020-02-19 17:28:29.622 (ebusd) Processing 'onHeartbeatCallback' message 2020-02-19 17:28:29.622 (ebusd) Calling message handler 'onHeartbeat'. 2020-02-19 17:28:29.623 (ebusd) onHeartbeat() called 2020-02-19 17:28:59.582 (ebusd) Pushing 'onHeartbeatCallback' on to queue 2020-02-19 17:28:59.586 (ebusd) Processing 'onHeartbeatCallback' message 2020-02-19 17:28:59.586 (ebusd) Calling message handler 'onHeartbeat'. 2020-02-19 17:28:59.586 (ebusd) onHeartbeat() called © 2012-2020 Domoticz | WWW: Domoticz.c

Can somebody help me here?

Python3.10 support - module 'collections' has no attribute 'MutableMapping'

I have to back to python 3.9 but for pyrhon3.10
AttributeError: module 'collections' has no attribute 'MutableMapping'

https://stackoverflow.com/questions/70943244/attributeerror-module-collections-has-no-attribute-mutablemapping

add log:

2022-05-24 12:19:50.614 Error: VailantPiec: (ebusd) failed to load 'plugin.py', Python Path used was '/var/lib/domoticz/plugins/DomoticzEbusd/:/usr/lib/python310.zip:/usr/lib/python3.10:/usr/lib/python3.10/lib-dynload:/usr/lib/python3.10/site-packages'.
2022-05-24 12:19:50.720 Error: VailantPiec: Traceback (most recent call last):
2022-05-24 12:19:50.721 Error: VailantPiec: File "/var/lib/domoticz/plugins/DomoticzEbusd/plugin.py", line 50, in <module>
2022-05-24 12:19:50.723 Error: VailantPiec: class CaseInsensitiveDict(collections.MutableMapping):
2022-05-24 12:19:50.724 Error: VailantPiec: AttributeError: module 'collections' has no attribute 'MutableMapping'

Hc1SFMode and onetimeventilation

I am trying to set Hc1SFMode value to onetimeventilation however it is always returned back to none status. When this is set directly on calormatic device UI, it stays as onetimeventilation...

I do expect there is some condition I have to meet in order to set the mode to 7, what values has to be set in order to turn the onetimeventilation ON ? Or how to grab and monitor what values has been changed ?

Thanks

pi@rpi3-ebus:~ $ sudo ebusctl w -c f47 Hc1SFMode 7
done

pi@rpi3-ebus:~ $ sudo ebusctl r -f Hc1SFMode
none

pi@rpi3-ebus:~ $
"Hc1SFMode": {
    "name": "Hc1SFMode",
    "passive": false,
    "write": false,
    "lastup": 1604443535,
    "zz": 21,
    "id": [181, 9, 13, 93, 0],
    "fields": {
     "0": {"name": "", "value": "none"}
    },
    "fielddefs": [
     { "name": "", "slave": true, "type": "UCH", "isbits": false, "length": 1, "values": { "0": "none", "1": "party", "2": "onedaybankholiday", "3": "onedayholiday", "4": "holiday", "5": "bankholiday", "6": "quickveto", "7": "onetimeventilation", "8": "onetimewater" }, "unit": "", "comment": "activated special function of first heating circuit"}

Changing parameter in ebusd configuration from read only to writable does not change domoticz instance

line 527
# check if device is already in domoticz database, based on deviceid bFound = False for iIndexUnit, oDevice in Devices.items(): # .lower() for backward compatibility if oDevice.DeviceID.lower() == sDeviceIntegerID: # log device found, with dFieldDefs["comment"] giving hints on how to use register Domoticz.Log("Device " + oDevice.Name + " unit " + str(iIndexUnit) + " and deviceid " + sDeviceID + " detected: " + dFieldDefs["comment"]) # if found, continue loop to next item bFound = True break

does not update read/write status for devices already in the database.

Maybe not a big problem, but it took a while for me to found out why the quickveto temp and hc1SFmode could not be changed in domoticz

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.