Hallo,
ich versuche ESPEasy und ESPEasy-Device auf einer Synology DS918+ im Container-Manager (Docker) zu betreiben. Der ESPEasy-Server ist ein ESP8266 mit der Firmware Build mega-20240414 mit der Adresse 192.168.178.64. Im Docker verwende ich fhem (aktuell). Dort ist im ESPEasy-bridge autocreate auf 1. Das entsprechende Device wird auch in fhem automtisch angelegt. Ich kann jedoch keine Befehle an den ESPEasy-Server senden und die Zustandsänderung der Ports auf dem ESP 8266 wird auch nicht gemeldet.
Im ESPEasy-Server ist die IP-Adresse der DS918+ in der Controller-IP angegeben. Die Ports stimmen überein. In Docker ist der Port 8383 ebenfalls angelegt.
Im Logfile ist folgender Eintrag:
ESPEasy ESPEasy_Garage_Rel1: set ESPEasy_Garage_Rel1 gpio 0 off
Es scheint alles in Ordnung.
Meine Vermutung:
Im fhem-Modul im ESPEasy-Device ist eine HOST-Adresse angegeben. Diese ist mit der internen Dockeradresse identisch und zeigt nicht auf den Host (ESP8266). Ich vermute, dass dies der Fehler ist.
List des Device:
Internals:
DEF 172.17.0.1 80 ESPBridge Garage_Rel1
FUUID 6656bab8-f33f-4323-a78c-d9f3991d4750dfd3
FVERSION 34_ESPEasy.pm:0.186080/2019-02-16
HOST 172.17.0.1
IDENT Garage_Rel1
INTERVAL 300
IODev ESPBridge
MAX_CMD_DURATION 1
NAME ESPEasy_Garage_Rel1
NOTIFYDEV global
NR 66
NTFY_ORDER 50-ESPEasy_Garage_Rel1
PORT 80
STATE on
SUBTYPE device
TYPE ESPEasy
VERSION 2.18
eventCount 11
READINGS:
2024-05-29 08:12:20 IODev ESPBridge
2024-05-29 07:32:07 Rel1 on
2024-05-29 08:47:44 presence absent
2024-05-29 08:12:20 state Initialized
helper:
fpc 1716963146.02464
pm:
Encode 1
JSON 1
received:
sec:
admpwd
Attributes:
Interval 300
devStateIcon on:ios-on-green:off off:ios-off:on absent:10px-kreis-rot:statusRequest
eventMap /gpio 0 on:on/gpio 0 off:off/
group ESPEasy Device
presenceCheck 1
readingSwitchText 1
room ESPEasy
setState 0
stateFormat Rel1
webCmd on:off
Zwischen fhem auf einem Raspberry und dem ESPEasy-Server funktioniert alles wie es soll.
Meine Fragen:
Liege ich mit meiner Vermutung richtig, oder wo liegt der Fehler?
Kann die Adresse des HOST im ESPEasy-Device in fhem einfach geändert werden, ggf. wo?
172.17.0.1 ist im B-Adressraum, 192.168.178.64 im C-Adressraum.
Für ein privates IP-Netz finde ich diese Konstellation ungewöhnlich.
Routingprobleme?
Tut mir leid, das mit den Adressräumen verstehe ich nicht. Ich verwende fhem in Docker auf einer Synology NAS. Angelesen habe ich mir, dass in Docker eigene Adressen verwendet werden. Deshalb werden dort Ports weitergeleitet für den Zugriff von Außen, d.h. die IP-Adresse des NAS. Aus Problemen mit der Anbindung von Homematic ist mir bekannt, dass dem Server (Homematic) beim Verbindungsaufbau mitgeteilt wird, wo hin die Daten gesendet werden sollen -hier zur IP-Adress des NAS-. Könnte es sein, dass der Verbindungsaufbau zum ESPEasy-Server ähnlich funktioniert. Es gibt aber leider keine Möglichkeit für diese Verbindung die Host-Adresse anzupassen.
Du wirst einen Container vermutlich nicht über seine Container-IP erreichen, sondern immer über seine Host IP und einen Port, den du an den Container weiterleitest. Achte dabei auch darauf, dass die Firewall der Synology den Zugriff nicht blockt.
Habe mal bei mir nachgesehen, habe zwar einen eigenen fhem-Container, dürfte aber vergleichbar sein. Ich habe bei HOST "bridge" stehen .. Du hast kein List von der ESPBridge hier eingestellt. Wie sieht die bei Dir aus?
defmod ESPEasy ESPEasy bridge 8086
attr ESPEasy allowedIPs 192.168.3.0/24
attr ESPEasy authentication 1
attr ESPEasy autocreate 1
attr ESPEasy combineDevices 1
attr ESPEasy group ESPEasy Bridge
attr ESPEasy httpReqTimeout 3
attr ESPEasy room ESPEasy,IO
attr ESPEasy verbose 0
Habe nur eine Authentication und IP-Begrenzung drin, müsstest Du bei Dir anpassen (oder Weglassen)
Hier das List der bridge:
Internals:
CONNECTS 1
DEF bridge 8383
FD 4
FUUID 12345gelöscht
FVERSION 34_ESPEasy.pm:0.186080/2019-02-16
HOST bridge
IPV 4
MAX_HTTP_SESSIONS 3
MAX_QUEUE_SIZE 250
NAME ESPBridge
NOTIFYDEV global
NR 65
NTFY_ORDER 50-ESPBridge
PORT 8383
STATE Initialized
SUBTYPE bridge
TYPE ESPEasy
VERSION 2.18
eventCount 1
READINGS:
2024-05-29 08:12:20 state Initialized
helper:
maxCmdDuration:
172.17.0.1 1
pm:
Encode 1
JSON 1
sessions:
172.17.0.1 0
hmccu:
Attributes:
authentication 0
deniedIPs 192.168.178.186
group ESPEasy Bridge
room ESPEasy
Ich habe nur eine IP-Begrenzung und vorerst keine Authentication eingestellt. Aber mein Listung ist deutlich länger, z.B. um den Teil helper. Habe ich die falsche Version??? fhem ist jedenfall auf aktuellstem Stand.
Darf ich fragen für was des alles gut sein soll?
Du kannst do den espeasy direkt aus Fhem ansprechen. Ohne Server oder Container
fhem läuft im Docker-Container, deshalb die Fragen. Ich hatt schon geschrieben, dass es mit fhem auf einem Raspberry keine Probleme gibt.
Ich verstehe immer noch nicht, warum es zwei verschiedene Netzwerke gibt mit unterschiedlichen Adressräumen.
Hier läuft auch ein Docker-container, aber im gleichen Netz mit der IP 192.168.0.x und einer Netzmaske 255.255.255.0. Die benötigten Ports sind im Container freigegeben.
Damit hab ich hier Platz für 254 verschiedene IP-Teilnehmer und die können sich bei Bedarf alle untereinander unterhalten.
Ein weiteres Netz mit einer IP 172.17.x.x hat gewöhnlicherweise eine Netzmaske von 255.255.0.0. Damit sind insgesamt 65535 verschiedene Teilnehmer möglich, aber ohne entsprechendes routing sind Geräte nicht im 192.168er Adressraum erreichbar.
IP-Netzwerke haben halt ihre Regeln....
Das ist alles richtig und auch im Grunde nach kein Problem, da andere Anwendungen mit dem Docker-Container keine Probleme haben. Nochmals: Ich gehe davon aus, dass das Modul ESPEase dem "Server ESPEasy-Geräte" mitteilt, wohin die Daten zu senden sind. Da steht im Normalfall im ESPEasy-Device (fhem) die Adresse des "Server ESPEasy-Gerätes" in den Internals in fhem. Betreibe ich fhem im Docker -so zumindest bei mir- so steht dort die interne von Docker verwendete Adresse. Diese ist natürlich nicht zutreffend, da dort die Adresse der Diskstation, auf der Docker betrieben wird, stehen sollte.
Ich verwende im Container-Manager (Docker) für das Netzwerk die Funktion bridge. Es gibt dort ja auch noch die Möglichkeit host anzugeben. Habe ich aber noch nie verwendet. Was ist bei dir dort eingestellt?
Der container läuft hier ebenfalls in bridge modus, die Ports 8083 und 8084 sind extern unter 83 und 84 erreichbar.
Vielleicht ist wirklich im ESPeasy-Modul etwas spezielles eingearbeitet, aber ich muß gestehen, daß ich dieses Modul nicht kenne.
Woher kommt nur die Adresse "HOST 172.17.0.1" ?? ::)
Diese Adresse wird im Container vergeben. Näheres kann ich dazu nicht sagen. Dadurch könnten wohl Container untereinander kommunizieren. Ich habe gerade noch dasselbe im host-Modus im Container versucht, dort funktioniert aber autocreate nicht und die ESPEasy-Geräte werden nicht angelegt. Auch manuelle Anlage hat nicht funktioniert.
Danke, für die Hilfe, ich möchte die Angelegenheit nicht weiter verfolgen.
auch wenn schon aufgegeben: ich meine die DEf ist falsch: DEF 172.17.0.1 80
Die IP die dort angegeben ist, ist doch die docker Host/Gateway Adresse vom internen docker Netzwerk?! (Der fhem container sollte .2 oder .3 oder so etwas haben.)
Zitat von: RappaSan am 30 Mai 2024, 10:44:26Woher kommt nur die Adresse "HOST 172.17.0.1" ?? ::)
Damit sieht die ESPEasy Bridge quasi die Kommunikation von der Quelle docker Host und nicht vom ESPeasy Quelldevice (Port mapping)
Du musst mMn einfach in deiner ersten DEF die Adresse auf 192.168.178.64 ändern. Autocreate wird in der Konstruktion immer "etwas" fehlschlagen, aber mit manueller Korrektur sollte es funktionieren.
Gruß Otto
Danke Otto,
ich habe nochmals die Module installiert, hatte schon alles gelöscht und begonnen auf MQTT umzustellen. Es funktioniert wie von dir beschrieben. Ich hatte in DEF versuchsweise die IP der Synologie DS918 eingetragen, was nicht funktionieren konnte. Ein Satz von dir und ich habs kapiert. In allen per Autocreate erstellten Devices muss DEV auf die IP-Adresse des ESPEasy geändert werden.
Besten Dank,
Eberhard