Nefit easy client

@michel72:
Look at https://github.com/marconfus/ha-nefit/issues/6. THat might help you further.

I hope someone has a solution for this problem?

018-08-23 09:04:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File “/usr/local/lib/python3.6/site-packages/homeassistant/setup.py”, line 56, in async_setup_component
return await task # type: ignore
File “/usr/local/lib/python3.6/site-packages/homeassistant/setup.py”, line 118, in _async_setup_component
conf_util.async_process_component_config(hass, config, domain)
File “/usr/local/lib/python3.6/site-packages/homeassistant/config.py”, line 687, in async_process_component_config
platform = get_platform(hass, domain, p_name)
File “/usr/local/lib/python3.6/site-packages/homeassistant/loader.py”, line 62, in get_platform
return get_component(hass, PLATFORM_FORMAT.format(domain, platform))
File “/usr/local/lib/python3.6/site-packages/homeassistant/loader.py”, line 94, in get_component
module = importlib.import_module(path)
File “/usr/local/lib/python3.6/importlib/init.py”, line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File “”, line 994, in _gcd_import
File “”, line 971, in _find_and_load
File “”, line 955, in _find_and_load_unlocked
File “”, line 665, in _load_unlocked
File “”, line 674, in exec_module
File “”, line 781, in get_code
File “”, line 741, in source_to_code
File “”, line 219, in _call_with_frames_removed
File “/config/custom_components/climate/nefit.py”, line 113
self._attributes[“connection_error_count”] +=
^
SyntaxError: invalid syntax

greetings justin

Try removing line 113 from /config/custom_components/climate/nefit.py
Please report back :slight_smile: Maybe the syntax for Python 3.6 has changed.
edit: On second thought, I am sure more people have used the Nefit component with Python 3.6…

First problem solved. second problem:

018-08-23 16:54:52 ERROR (SyncWorker_18) [sleekxmpp.xmlstream.resolver] All nameservers failed to answer the query wa2-mz36-qrmzh6.bosch.de. IN AAAA: Server 172.30.32.2 UDP port 53 answered DNS message is malformed.
Traceback (most recent call last):
File “/config/deps/lib/python3.6/site-packages/sleekxmpp/xmlstream/resolver.py”, line 242, in get_AAAA
recs = resolver.query(host, dns.rdatatype.AAAA)
File “/usr/local/lib/python3.6/site-packages/dns/resolver.py”, line 947, in query
raise NoNameservers(request=request, errors=errors)
dns.resolver.NoNameservers: All nameservers failed to answer the query wa2-mz36-qrmzh6.bosch.de. IN AAAA: Server 172.30.32.2 UDP port 53 answered DNS message is malformed.
2018-08-23 16:54:52 ERROR (read_thread) [sleekxmpp.xmlstream.xmlstream] Certificate has expired.
2018-08-23 16:54:52 WARNING (read_thread) [sleekxmpp.xmlstream.xmlstream] Failed to send b"<stream:stream to=‘wa2-mz36-qrmzh6.bosch.de’ xmlns:stream=‘http://etherx.jabber.org/streams’ xmlns=‘jabber:client’ xml:lang=‘en’ version=‘1.0’>"
2018-08-23 16:54:52 ERROR (read_thread) [sleekxmpp.xmlstream.xmlstream] Socket Error #9: Bad file descriptor
2018-08-23 16:54:58 ERROR (read_thread) [sleekxmpp.xmlstream.resolver] All nameservers failed to answer the query wa2-mz36-qrmzh6.bosch.de. IN AAAA: Server 172.30.32.2 UDP port 53 answered DNS message is malformed.
Traceback (most recent call last):
File “/config/deps/lib/python3.6/site-packages/sleekxmpp/xmlstream/resolver.py”, line 242, in get_AAAA
recs = resolver.query(host, dns.rdatatype.AAAA)
File “/usr/local/lib/python3.6/site-packages/dns/resolver.py”, line 947, in query
raise NoNameservers(request=request, errors=errors)
dns.resolver.NoNameservers: All nameservers failed to answer the query wa2-mz36-qrmzh6.bosch.de. IN AAAA: Server 172.30.32.2 UDP port 53 answered DNS message is malformed.
2018-08-23 16:54:59 ERROR (read_thread) [sleekxmpp.xmlstream.xmlstream] Certificate has expired.
2018-08-23 16:54:59 WARNING (read_thread) [sleekxmpp.xmlstream.xmlstream] Failed to send b"<stream:stream to=‘wa2-mz36-qrmzh6.bosch.de’ xmlns:stream=‘http://etherx.jabber.org/streams’ xmlns=‘jabber:client’ xml:lang=‘en’ version=‘1.0’>"
2018-08-23 16:54:59 ERROR (read_thread) [sleekxmpp.xmlstream.xmlstream] Socket Error #9: Bad file descriptor
2018-08-23 16:54:59 WARNING (MainThread) [homeassistant.components.climate] Setup of platform nefit is taking over 10 seconds.
2018-08-23 16:55:05 ERROR (read_thread) [sleekxmpp.xmlstream.resolver] All nameservers failed to answer the query wa2-mz36-qrmzh6.bosch.de. IN AAAA: Server 172.30.32.2 UDP port 53 answered DNS message is malformed.
Traceback (most recent call last):
File “/config/deps/lib/python3.6/site-packages/sleekxmpp/xmlstream/resolver.py”, line 242, in get_AAAA
recs = resolver.query(host, dns.rdatatype.AAAA)
File “/usr/local/lib/python3.6/site-packages/dns/resolver.py”, line 947, in query
raise NoNameservers(request=request, errors=errors)
dns.resolver.NoNameservers: All nameservers failed to answer the query wa2-mz36-qrmzh6.bosch.de. IN AAAA: Server 172.30.32.2 UDP port 53 answered DNS message is malformed.
2018-08-23 16:55:05 ERROR (MainThread) [homeassistant.components.sensor] scrape: Error on device update!
Traceback (most recent call last):
File “/usr/local/lib/python3.6/site-packages/homeassistant/helpers/entity_platform.py”, line 248, in _async_add_entity
await entity.async_device_update(warning=False)
File “/usr/local/lib/python3.6/site-packages/homeassistant/helpers/entity.py”, line 322, in async_device_update
yield from self.hass.async_add_job(self.update)
File “/usr/local/lib/python3.6/concurrent/futures/thread.py”, line 56, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/local/lib/python3.6/site-packages/homeassistant/components/sensor/scrape.py”, line 120, in update
value = raw_data.select(self._select)[0].text
IndexError: list index out of range
2018-08-23 16:55:06 ERROR (read_thread) [sleekxmpp.xmlstream.xmlstream] Certificate has expired.
2018-08-23 16:55:06 WARNING (read_thread) [sleekxmpp.xmlstream.xmlstream] Failed to send b"<stream:stream to=‘wa2-mz36-qrmzh6.bosch.de’ xmlns:stream=‘http://etherx.jabber.org/streams’ xmlns=‘jabber:client’ xml:lang=‘en’ version=‘1.0’>"
2018-08-23 16:55:06 ERROR (read_thread) [sleekxmpp.xmlstream.xmlstream] Socket Error #9: Bad file descriptor

It works with the command line. but in homeassistant i still got the problem from above.
:frowning:

Maybe someone knows what to do?
Greetings justin

solved with this hack

nefit hassio

same here, works on cli but hass complains about missing nefit

In hassio i used this for installation… Only for hassio!

#run shell in homeassistant docker containter
docker exec -it homeassistant /bin/bash

# define user base directory
export PYTHONUSERBASE=/config/deps

#install pyaes
pip3 install --user --no-cache-dir --prefix= --no-dependencies pyaes

#install nefit-client
pip3 install --user --no-cache-dir --prefix= --no-dependencies nefit-client

pip3 install --user --no-cache-dir --prefix= --no-dependencies sleekxmpp

Hi all,

first of all thanks for the great Nefit component!

Recently the Dutch language was released for Google Assistant, so I bought a couple of Google Homes. Everything in HASS is working as expected except for this custom climate component.
It is visible in the Google Home app and it will show the current measured temperature but setting a temperature is not possible. Not by voice or in the Google app. In the app it just keeps saying ‘loading’.

Does this component work for someone else from within the Google Assistant/Home app or by voice? That would mean I have something setup wrong. Or is this a shortcoming/bug in the ha-nefit component?

I tried using IFTTT the set the temperature directly on the Nefit with Google Assistant, unfortunatly IFTTT doesn’t support the Dutch assistant language yet…

Any ideas?

Thanks!

i have problems getting the settings correct I have the following settings:

climate:
  platform: nefit
  name: Heating
  serial: '12345678'
  accesskey: 'RandomString'
  password: '1234PP11'

but it does not seem to work
i have 2 spaces in front of the platform and so on. Am I doing something wrong?

I get these errors:

‘utf-8’ codec can’t decode byte 0xbd in position 7: invalid start byte
19:58 deps/lib/python3.6/site-packages/nefit/init.py (ERROR)
Error handling {jabber:client}message stanza
19:58 deps/lib/python3.6/site-packages/nefit/init.py (ERROR)
Error processing event handler: <bound method NefitCore.message of <nefit.NefitClient object at 0x72ed3d30>>
19:58 deps/lib/python3.6/site-packages/nefit/init.py (ERROR)

It used to work, but after checking again, it does not anymore.

Does anyone know when this feature request will be added as default component in the HASS.IO because… i can’t install it into the HASSIO raspberry PI.

ow okay since when didn’t it work anymore and do more people have this?

Yes! finally working under HASSIO.
I first installed the dependencies in a docker home assistant image.
Then I copied the folder deps from the docker image to the hassio config folder!
It is working. HASSIO is reading the temperatures and I can manage it!

AFter the latest update it isn’t working anymore.

Sat Oct 27 2018 10:04:56 GMT+0200 (Midden-Europese zomertijd)

DNS: dnspython not found. Can not use SRV lookup.

<OctetString schema object at 0x6ead75b0 tagSet <TagSet object at 0x72ee3550 tags 0:0:4> encoding iso-8859-1>
Traceback (most recent call last):
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/xmlstream.py”, line 1492, in _process
if not self.__read_xml():
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/xmlstream.py”, line 1564, in __read_xml
self.__spawn_event(xml)
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/xmlstream.py”, line 1632, in __spawn_event
handler.prerun(stanza_copy)
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/handler/callback.py”, line 64, in prerun
self.run(payload, True)
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/handler/callback.py”, line 76, in run
self._pointer(payload)
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/features/feature_starttls/starttls.py”, line 64, in _handle_starttls_proceed
if self.xmpp.start_tls():
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/xmlstream.py”, line 889, in start_tls
cert.verify(self._expected_server_name, self._der_cert)
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/cert.py”, line 134, in verify
cert_names = extract_names(raw_cert)
File “/usr/local/lib/python3.6/site-packages/sleekxmpp/xmlstream/cert.py”, line 73, in extract_names
asn1Spec=OctetString())[0]
File “/usr/local/lib/python3.6/site-packages/pyasn1/codec/ber/decoder.py”, line 1318, in call
‘%s not in asn1Spec: %r’ % (tagSet, asn1Spec)
pyasn1.error.PyAsn1Error: <TagSet object at 0x6f86f350 tags 0:32:16> not in asn1Spec: <OctetString schema object at 0x6ead75b0 tagSet <TagSet object at 0x72ee3550 tags 0:0:4> encoding iso-8859-1>

Stopped working after last update of HA
See: Nefit stopped working after 'upgrade' to HASSIO "version": "0.81.0",

Github: https://github.com/marconfus/ha-nefit/issues/15#issuecomment-433920319


“I figured out a littlebit more, it seems they updated the sleekxmpp component from 1.3.2 to 1.3.3, and this breaks the Nefit (and apparently Netflix) plugins.
Still not sure what in 1.3.3 changed to break this.”

still working on 0.81 with the SSL fix.

This is because the state isn’t correct for google home.

The state IDLE needs to replaced with COOL.

You can do this by yourself and change the following lines in the nefit.py

from homeassistant.components.climate import ( ClimateDevice, PLATFORM_SCHEMA,
STATE_AUTO, STATE_HEAT, STATE_COOL, STATE_IDLE, STATE_ON, STATE_OFF,
SUPPORT_TARGET_TEMPERATURE, SUPPORT_OPERATION_MODE )


    @property
def current_operation(self):
    state = self._data.get("boiler indicator")
    if state == 'central heating':
        return STATE_HEAT
    elif state == 'hot water':
        return STATE_HOTWATER
    elif state == 'off':
        return STATE_COOL
    else:
        return None

Thanks! This change makes the Easy work with the Google Home app, I haven’t tried it with voice commands yet though. Although I expect no issues with that.

However this does change the state reported in Home Assistant aswell though. I tried editing the trait.py in the google_assistant component. To keep the idle state in Hass but report ‘cool’ state to GHome.

hass_to_google = {
   climate.STATE_HEAT: 'heat',
   climate.STATE_COOL: 'cool',
   climate.STATE_OFF: 'off',
   climate.STATE_AUTO: 'heatcool',

   into

   hass_to_google = {
   climate.STATE_HEAT: 'heat',
   climate.STATE_COOL: 'cool',
   climate.STATE_OFF: 'off',
   climate.STATE_AUTO: 'heatcool',
   climate.STATE_IDLE: 'cool',

But since I’m running HASSio the change in the Docker container isn’t saved after a reboot and thus never becomes active. Then I tried adding google_assistant as a custom component to overwrite the default, but even without any changes the custom component fails to load with a error: importError: cannot import name ‘CLOUD_NEVER_EXPOSED_ENTITIES’

Any tips? Otherwise I will just keep it the way you suggested. It is no big deal, but it does trigger my OCD. :laughing:

Does anyone know if there is some kind of tutorial or something to get this working on Hass.io?
I have read this topic, but i’m to new at Home Assistant to get this stuff working…
Light bulb’s and buttons etc is a piece of cake in HA but this thing is a tough nut to crack :stuck_out_tongue:

Please help, i buy you a beer haha