Ethersex, AVR NetIO, 1wire DS18B20 - Temperaturwerte nur sporadisch aktualisiert

Begonnen von sukram, 10 November 2019, 16:35:20

Vorheriges Thema - Nächstes Thema

sukram

Guten Tag alle miteinander,

ich habe hier ein ziemlich schräges Problem.  Die Temperaturwerte der 1wire Sensoren werden nur spradisch gelesen/aktualisiert.

Die Umgebung:
- AVR NetIO mit Mega644p, umgebaute Stromversorgung (5V aus externem NT, zusätzliche Kondensatoren am Netzwerkchip)
- 2x DS18B20 mit 4,7kOhm Pullup an Port PA7 (Schraubklemmen, ADC deaktiviert, Port im Pinning angepasst)
- Takt 16 MHz, Fuses sind richtig gestzt -> mit Onlinerechner und anderen Foreneinträgen verglichen, Messung kann noch folgen
- Ethersex Stand aus Git Repos vom 30. Oktober 2019
Aktuelle Config, mit "grep -v \# .config" auf alle unkommentierten Zeilen reduziert:


ARCH=ARCH_AVR
ARCH_AVR=y
MCU=atmega644p
atmega644p=y
FREQ=16000000
HARDWARE=netio
netio=y
BOOTLOADER_SIZE=0
BOOTLOADER_START_ADDRESS=0x10000
FLASH_SIZE=0x10000
EEPROM_SIZE=0x800
RAM_SIZE=0x1000
FLASH_PAGESIZE=0x100
EEPROM_PAGESIZE=0x8
GIT_VERSION="773b9f7c"

CONF_MTICKS_PER_SEC=50
CONF_PERIODIC_USE_TIMER=1
PERIODIC_TIMER_API_SUPPORT=y
CONF_SCHEDULER_NUM_DYNAMIC_TIMERS=8
VFS_SUPPORT=y
VFS_INLINE_SUPPORT=y
CONFIG_INLINE_SUPPORT=y
VFS_IO_INLINE_SUPPORT=y
ONEWIRE_INLINE_SUPPORT=y
NAMED_PIN_INLINE_SUPPORT=y
VFS_INLINE_INLINESVG_SUPPORT=y
VFS_INLINE_INLINESVG_SUPPORT=y

CONF_HOSTNAME="avrnetio"
NET_MAX_FRAME_LENGTH=600
ENC28J60_SUPPORT=y
CONF_ENC_MAC="00:22:f9:01:5e:3d"
CONF_ENC_IP="10.102.1.240"
CONF_ENC_IP4_NETMASK="255.255.255.0"
CONF_ENC_ECOCON=ECOCON_0
ECOCON_0=y
ETHERNET_SUPPORT=y
CONF_TAP_MAC="ac:de:48:fd:0f:d0"
CONF_TAP_IP="192.168.23.244"
CONF_TAP_IP4_NETMASK="255.255.255.0"
CONF_TAP_LOCALIP="192.168.23.1"
CONF_RFM12_FREQ=RFM12_FREQ_433920
RFM12_FREQ_433920=y
CONF_RFM12_BAUD=19200
CONF_RFM12_IP="192.168.5.1"
CONF_RFM12_IP4_NETMASK="255.255.255.0"
UIP_SUPPORT=y
NET_SUPPORT=y
IPV4_SUPPORT=y
CONF_ETHERSEX_GATEWAY="10.102.1.254"
TCP_SUPPORT=y
ICMP_SUPPORT=y
CONF_DNS_SERVER="192.168.23.254"
CONF_OPENVPN_KEY=00000000000000000000000000000000
CONF_OPENVPN_HMAC_KEY=00000000000000000000000000000000
CONF_OPENVPN_IP="0.0.0.0"
CONF_OPENVPN_IP4_NETMASK="255.255.255.0"
CONF_OPENVPN_PORT=1194

PORTIO_SCHEME=PORTIO_SIMPLE
PORTIO_SIMPLE=y
PORTIO_SIMPLE_SUPPORT=y
NAMED_PIN_SUPPORT=y
_NP_CONFIG=netio_k8io
netio_k8io=y
NP_CONFIG=pinning/named_pin/netio_k8io
TTY_COLS=16
TTY_LINES=4

HC595_REGISTERS=5
HC165_REGISTERS=1

CONFIG_ADC_AREF=y
ADC_REF=ADC_AREF
NEED_TEMP2TEXT=y
CONF_LTC1257_NUM_DEVICES=4

CONF_GLCD_MONO_TYPE=GLCD_MONO_NONE
GLCD_MONO_NONE=y
CONF_GLCD_COLOR_TYPE=GLCD_COLOR_NONE
GLCD_COLOR_NONE=y



CONF_FS20_SERVICE="merkur"
CONF_FS20_PORT=2701

CONF_RC5_SERVER="192.168.100.3"
REMOTE_IRMP_PORT=10001
ONEWIRE_SUPPORT=y
ONEWIRE_DS18XX_SUPPORT=y
ONEWIRE_DEVICES=y
OW_DISCOVER_INTERVAL=120
OW_POLLING_INTERVAL=5
OW_SENSORS_COUNT=5
ONEWIRE_ECMD_LIST_SUPPORT=y
ONEWIRE_ECMD_LIST_VALUES_SUPPORT=y

CONF_MCUF_SCROLLTEXT_STARTUP="Hi I am your ethersex ;-) "
CONF_MCUF_SCROLLTEXT_STARTUP_COLOR=240
CONF_MCUF_SCROLLTEXT_STARTUP_BG_COLOR=1
CONF_MCUF_SCROLLTEXT_STARTUP_SPEED=2
MCUF_MODUL_DISPLAY_MODE_CRON=MCUF_MODUL_DISPLAY_MODE_CRON_RANDOM
MCUF_MODUL_DISPLAY_MODE_CRON_RANDOM=y
MCUF_MODUL_DISPLAY_MODE=MCUF_MODUL_DISPLAY_MODE_RANDOM
MCUF_MODUL_DISPLAY_MODE_RANDOM=y

NET_MAX_FRAME_LENGTH_GT_571=y
CONF_ARTNET_PORT=6454
CONF_ARTNET_INUNIVERSE=1
CONF_ARTNET_OUTUNIVERSE=0
CONF_ARTNET_OUTPUT_IP="192.168.0.255"
DMX_OUTPUT_UNIVERSE=1
ECMD_PARSER_SUPPORT=y
ECMD_TCP_SUPPORT=y
ECMD_TCP_PORT=2701
EMS_BUFFER_LEN=255
EMS_PORT=7950
FNORDLICHT_BAUDRATE=19200
CONF_FNORDLICHTER=1
CONF_HTTPLOG_SERVICE="volkszaehler.org"
CONF_HTTPLOG_PATH="/httplog/httplog.php"
CONF_HTTPLOG_UUID="12345678-9ABC-DEF0-1234-56789ABCDEF0"
HTTPLOG_BUFFER_LEN=140
CONF_IRC_IP="192.168.23.254"
CONF_IRC_PORT=6667
CONF_IRC_CHANNEL="ethersex"
CONF_IRC_USERNAME="ethersex"
CONF_IRC_NICKNAME="ethersex"
CONF_IRC_REALNAME="Ethersex Wollmilchsau"
MQTT_CALLBACK_SLOTS=1
CONF_MYSQL_IP="192.168.23.254"
CONF_MYSQL_USERNAME="root"
CONF_MYSQL_PASSWORD="password"
CONF_MYSQL_SCHEMA="mavisdb"
CONF_NETSTAT_SERVICE_IP="188.40.33.175"
CONF_NETSTAT_SERVICE="ethersex.de"
CONF_NETSTAT_API="/~habo/stat/"

CONF_SIP_PROXY_IP="192.168.178.1"
CONF_SIP_FROM="621"
CONF_SIP_TO="622"
CONF_SIP_AUTH_USER="621"
CONF_SIP_AUTH_PASS="tester"
CONF_SENDMAIL_IP="78.47.210.246"
CONF_SENDMAIL_FROM="root@sex.metafnord.de"
CONF_SENDMAIL_TO="stesie@brokenpipe.de"
CONF_SMS77_SERVICE="gateway.sms77.de"
CONF_SMS77_USER=""
CONF_SMS77_PASS=""
CONF_SMS77_TO=""
CONF_SMS77_TYPE_CHOICE=CONF_SMS77_TYPE_BASICPLUS
CONF_SMS77_TYPE_BASICPLUS=y
CONF_SMS77_TYPE="basicplus"
CONF_SYSLOG_SERVER="192.168.23.73"
SYSLOG_QUEUE_LEN=10
CONF_TWITTER_SERVICE="identi.ca"
CONF_TWITTER_API="/api"
CONF_TWITTER_USERNAME="ethersex"
CONF_TWITTER_PASSWORD=""
CONF_TWITTER_AUTH="ZXRoZXJzZXg6"
CONF_USTREAM_IP="205.188.234.7"
CONF_USTREAM_PORT=80
YPORT_PORT=7970
YPORT_BAUDRATE=115200
YPORT_USART_CONFIG=YPORT_USART_CONFIG_8N1
YPORT_USART_CONFIG_8N1=y
YPORT_BUFFER_LEN=500
CONF_YPORT_FLUSH=25
YPORT_FLUSH_SUPPORT=y
BSBPORT_PORT=3000
BSBPORT_BAUDRATE=4800
BSBPORT_BUFFER_LEN=32
BSBPORT_FLUSH=25
BSBPORT_MESSAGE_BUFFER_LEN=10
BSBPORT_MESSAGE_MAX_LEN=25
BSBPORT_OWNADDRESS=7
TO1_SENSOR_COUNT=1
SERIAL_LINE_LOG_TIMEOUT=20
SERIAL_LINE_LOG_EOL=0A
SERIAL_LINE_LOG_COUNT=60
SERIAL_LINE_LOG_BAUDRATE=9600
UDP_STELLA_PORT=2702
UDP_IO_PORT=2703
UDP_MOTORCURTAIN_PORT=2704
CW_WPM=12
SGC_BAUDRATE=9600
SGC_SLEEPMODE=0

CLOCK_SUPPORT=y
CLOCK_DATETIME_SUPPORT=y

TZ_OFFSET=0
DST_OFFSET=0
DST_BEGIN_MONTH=3
DST_BEGIN_WEEK=5
DST_BEGIN_DOW=0
DST_BEGIN_HOUR=2
DST_END_MONTH=10
DST_END_WEEK=5
DST_END_DOW=0
DST_END_HOUR=3
CLOCK_PERIODIC_SUPPORT=y
NTP_SERVER_IP="192.53.103.108"
NTP_PORT=123
NTP_QUERY_INTERVAL=1800
DMX_STORAGE_UNIVERSES=2
DMX_STORAGE_CHANNELS=64
DMX_STORAGE_SLOTS=5
DMX_FXSLOT_AMOUNT=4
CONF_MOTD_DEFAULT="empty"
CONF_MOTD_SIZE=50
HTTPD_SUPPORT=y
HTTPD_PORT=80
HTTPD_ALTERNATE_PORT=8000
CONF_JABBER_IP="78.47.210.246"
CONF_JABBER_HOSTNAME="jabber.zerties.org"
CONF_JABBER_USERNAME="esex"
CONF_JABBER_PASSWORD="password"
CONF_JABBER_RESOURCE="ethersex"
CONF_JABBER_BUDDY="stesie@jabber.zerties.org"
MOODLIGHT_CHANGEGAP_INIT=120
STELLA_FREQ=stella_normal
stella_normal=y
STELLA_START=stella_start_zero
stella_start_zero=y
STELLA_FADE_STEP_INIT=10
STELLA_FADE_FUNCTION_INIT=stella_fade_func_0
stella_fade_func_0=y
CONF_BOOTLOAD_DELAY=250
CONF_UPNP_MULTICAST_IP="239.255.255.250"
CONF_UPNP_SCHEME_FILENAME="/ih.xml"
VNC_PORT=5900
CONF_WATCHASYNC_SERVER="volkszaehler.org"
WATCHASYNC_SERVER_IP="78.46.142.232"
CONF_WATCHASYNC_PORT=80
CONF_WATCHASYNC_METHOD="POST"
CONF_WATCHASYNC_PATH="/path/to/volkszaehler/backend.php/data/"
CONF_WATCHASYNC_END_PATH=""
CONF_WATCHASYNC_BUFFERSIZE=64





CONF_SENSOR_PSU="1015ccf501080065"
CONF_SENSOR_AIR="10567cf501080006"
CONF_SENSOR_RAM="10cba7f5010800d3"
CONF_LOME6_POD=0
CONF_TIME2PRESS_RESET=40
CONF_TIME2PRESS_POWER=40
CONF_TIME2PRESS_POWERL=3
TANKLEVEL_ADC_CHANNEL=0
TANKLEVEL_SENSOR_OFFSET=0
TANKLEVEL_MED_DENSITY=840
TANKLEVEL_LTR_PER_M=3409
TANKLEVEL_LTR_FULL=10000
TANKLEVEL_RAISE_TIME=50
TANKLEVEL_HOLD_TIME=20
IPV4_SUPPORT=y

CONFIG_AVRDUDE_PROGRAMMER=_usbasp_clone
_usbasp_clone=y
AVRDUDE_PROGRAMMER=usbasp-clone
CONFIG_AVRDUDE_PORT="usb"
AVRDUDE_PORT=usb
AVRDUDE_VERBOSE=-v
CONFIG_AVRDUDE_BITCLOCK=AVRDUDE_BITCLOCK_1
AVRDUDE_BITCLOCK_1=y
AVRDUDE_BITCLOCK="-B 1"
CONFIG_AVRDUDE_EXTRA_OPTIONS=""
CONFIG_AVRDUDE_LFUSE=e6
AVRDUDE_LFUSE=0xe6
CONFIG_AVRDUDE_HFUSE=d1
AVRDUDE_HFUSE=0xd1
CONFIG_AVRDUDE_EFUSE=fd
AVRDUDE_EFUSE=0xfd


Mein konkretes Problem ist, dass die Sensoren zwar sofort gefunden werden (1w list liefert die 2 IDs), aber die Werte nur in sporadischen Abständen (zwischen wenigen Minuten und etlichen Stunden) richtig übernommen werden. Ich habe nach einem Neustart erstmal > 5min lang nur "0.0" drinstehen, gefühlt "irgendwann" tauchen dann mal plausible Werte auf. Das automatische Polling kann gar nicht abgestellt werden

Die Sensoren sind in 3-Draht angeschlossen (kein Parasitärbetrieb), mit 5V Ub und 5V Pullup. An einem Wemos D1 Clone mit 5V Ub und 3.3V Pullup funktionieren die Sensoren samt Verkabelung auf Anhieb (aktuelle Tasmota Version) und liefern im Sekundentakt Werte. Ob diese Fakes sind, die bei bestimmten Konstellationen Mist machen, kann ich nicht beurteilen - habe sie bei einem deutschen Ebayhändler gekauft und mit 8 weiteren aus der Bestellung bisher keinen Ärger (an ESP/Tasmota Modulen) gehabt.

Ich hatte ursprünglich vor, den NetIO als Gateway für einen ganzen Sack voll Sensoren u.a. an der Heizung einzusetzen, sowie als Modbus Gateway (RS485 Adapter habe ich noch nicht fertig) u.a. für einen digitalen Zähler. Mittlerweile ist die Config oben auf das minimalste zurückgeschnitten (1wire + DS1820, IP+TCP, Httpd).

Die Software für den Mega32 kompiliert (Konfig um httpd reduziert) verhält sich exakt gleich - Sensoren werden sofort gefunden, aber Werte kommen nur sporadisch. Zwischendurch habe ich auch noch mal komplett gelöscht und neu ausgecheckt und konfiguriert - Fehler bleibt.

Irgendwo stehe ich gerade auf dem Schlauch - vielleicht auch etwas betriebsblind.

Was ich zur Diagnose noch vorhabe:
- ältere Ethersex Version aus dem Repo versuchen und ggf. Commits nach Änderungen im 1wire abgrasen
- mit Oszilloskop Takte und Datenleitung der 1w prüfen
- 1w Pullup auf 3.3V runterdrehen (mal sehen, ob der Mega das noch frisst)

Ich hoffe ich habe jetzt kein Detail übersehen. Seht ihr auf den ersten Blick einen Anwenderfehler?

Einen schönen Sonntag noch!

PS: Warum haben Tasmota und Ethersex eigentlich völlig verschiedene Sensor-IDs? Ist das nur LSB/MSB rechnerei oder steckt da mehr dahinter?

Garry

Du hast für den Mega32 kompiliert und auf den 644 aufgespielt oder dann auch den uC getauscht?
Ich würde noch mal in Minimalkonfiguration mit einem Sensor und kurzen Kabeln testen. Den Schraubklemmen traue ich auch nicht all zu viel zu falls Du die verwendest.
- Nochmal prüfen ob alles für den 16Mhz Quarz konfiguriert ist und ob dieser auch richtig schwingt.
- uC tauschen ob der ein Problem hat.
- Mit Original NETIO-SW prüfen ob es da geht

Habe ähnliches vor, nur die SW selber geschrieben, mangels Zeit dann aber noch nicht weiter verfolgt.

Gruß
Garry
Raspberry Pi COC
HM_LAN

sukram

Hallo,

ich habe die Software jeweils für den Controller neu compiliert und geflasht, nachdem die uC auch getauscht wurden. Fuses stimmen anscheinend auch, und die Klemmen scheinen auch ok zu sein, da die 1w Sensoren auch sofort gefunden werden. Die original Netio SW hat gar keine Unterstützung für 1w - das Gerät lief schon ein paar Wochen mit einer älteren Ethersex Konfig (ohne 1wire), nur als I/O Adapter.

Mittlerweile glaube ich aber, der Controller kommt Leistungsmäßig an seine Grenzen, wenn neben 1wire noch andere Sachen mit knappen Timings aktiv sind. Nachdem ich die Modbus Unterstützung entfernt hatte, wurde es etwas besser (Werte alle paar Minuten statt Stunden), dummerweise habe ich dabei auch die Timings insgesamt straffer eingestellt (Discover 120sec, Polling 5sec, Max Anzahl Sensoren 5, Anzahl Busse reduziert von PA4-7 auf PA7), sodass ich nicht genau eingrenzen kann, was nun mehr Erfolg hatte.

Ich werde jetzt mal eine Konfig einspielen, wo Modbus wieder aktiv ist, mal sehen, ob es dann wieder schlechter wird (was ich annehme).

Wenn alles nichts hilft, werde ich mal einen Mega32 mit 1wire und seriellem ECMD Interface zusammenschießen. Sollte dann ja ziemlich problemlos gehen, wenn der Prozessor kein Ethernet mehr bedienen muss.

sukram

Schöne Weihnachten miteinander!

Ein kurzes Update von mir: Ich habe wenige Tage später noch mal per git clone den Code gezogen, Pinout reingeklimpert, Image neu konfiguriert und kompiliert -> läuft! Es gibt nach dem Neustart eine Weile lang keine Werte, aber nach ca. 10min kommen Updates.

Für mich funktioniert es jetzt erstmal. Was mich jetzt noch stört, das die e6 Software eine andere Endianess Einstellung für die onewire-ID verwendet, als Tasmota:


ether6:
28dbb47997070397

28 db b4 79 97 07 03 97
-- 6  5  4  3  2  1  --

03 07 97 79 b4 db
1  2  3  4  5  6

Tasmota:
03079779B4DB


Mal sehen, ob ich mir das in Perl schmiede, um einen Block Sensoren gleichzeitig abzufragen - damit ich die Daten wie aus den Tasmota Nodes aufbereitet bekomme.