Hallo,
inspiriert von diesem Beitrag http://forum.fhem.de/index.php/topic,33656.msg260395.html#msg260395 (http://forum.fhem.de/index.php/topic,33656.msg260395.html#msg260395) Günstiger, einfacher WLAN Impulsnhemer für Gaszähler
und http://forum.fhem.de/index.php/topic,15780.msg269166.html#msg269166 (http://forum.fhem.de/index.php/topic,15780.msg269166.html#msg269166) Firmata over Ethernet: Einbindung in Arduino
habe ich mir mal ein HLK-RM04 und einen nano bestellt, eigentlich wollte ich nur den Gaszähler realisieren.
Tja, wie es dann so kommt, der Spieltrieb war stärker, ich wollte dann auch noch Firmata über Wlan ausprobieren was für mich wiederum viele neue Anwendungsmöglichkeiten bietet.
Wie ich in dem 2. Thread gelesen habe gibt es mit der Ethernet Anbindung mit dem ENJ ein bischen Speicherengpässe, da HLK-RM04 den kompletten IP-Stack bereitstellt kann man die Standard Firmata verwenden.
Meine Vorgehensweise:
Step1 Nano mit HLK-RM04:
Nano V3, mit Standard Firmata flashen
HLK nach diesem Schema anschliessen
http://rayshobby.net/first-impression-on-hlk-rm04-serial-to-wifi-module/
(diesen Link habe ich aus dem Gaszähler Thread)
Nano an eine USB Stromquelle anstecken (kein aktives USB Port eines Computers)
HLK konfigurieren:
Wlan settings
Serial 57600,8,n,1
Server port (in meinem Beispiel 8080)
Network mode Server
TCP
siehe auch Bild im Anhang
Schritt2:
virtuelle Device für FHEM FRM erstellen, ich habe das mal zum testen noch nicht in die startupscripts eingebaut, also aus der shell
socat pty,link=/dev/ttyV0,waitslave tcp:192.168.255.21:8080 &
damit wird das virtuelle device /dev/ttyV0 erstellt und auf die IP-Adresse und Port des HLK gerouted.
Achtung, FHEM muss die ensprechenden Rechte auf dieses Device bekommen!
Schritt3:
Anlegen des FRM devices in FHEM
define NANO FRM /dev/ttyV0
das war es, siehe zweites Bild.
Vielleicht kann das ja jemand brauchen, Viel Spass
Karl
Sehr interessante Lösung,
aber ich halte den Aufwand für zu groß.
Ich habe zwei config.FIRMATA's (arduino Mega) in FHEM eingebunden, allerdings mit dem Arduino Ethernet Shield und nicht mit ENC28J80. Diese Kombination läuft bei mir nun seit deutlich mehr als 1 Jahr vollkommen störungsfrei. Preislich ist das Eth.Shield auch günstiger.
Viele Grüße!
Andreas
Das ist schon klar, dort wo ich Kabel habe, verwende ich sowieso 1-wire. Leider habe ich beim Bau vor 20 Jahren nicht überall Kabel oder Leerrohre dorthin gelegt wo ich sie heute brauchen würde. Und ausserdem, Nano + HLK = ca. € 12.-, das ist bezahlbar. Nachteil ist natürlich der Stromverbrauch was Batterbetrieb ausschliesst. Aber ich bekomme ja hoffentlich bald meine ESP8266 da schauts besser aus.
Gruß
Karl
Zitat von: schka17 am 04 März 2015, 17:22:46
Aber ich bekomme ja hoffentlich bald meine ESP8266 da schauts besser aus.
mit dem ESP8266 und einem lua script uart2tcp hat man ganz schnell die serielle Schnittstelle auf einen TCP Port umgebogen (habe ich gestern Abend erfolgreich mit FHEMduino und JeeLink getestet , ist hier aber OT)
was mich eigentlich interessiert :
Wie stabil läuft dein socat ? Ich habe in der Vergangenheit mit socat keine guten Erfahrungen gemacht , d.h. ständig hat sich dieser Prozess ohne erkennbaren Grund verabschiedet.
Ich bin ja noch in der "experimentelle Phase", ich kann nicht sagen woher diese Instabilität herkommt, Tatsache ist, dass ich immer Verbindungsproblem habe, ich führte das aber auf meine Spielereien zurück. Seit dem Wochenende lief es eigentlich 48 h ohne Problem bis ich wieder herumgebastelt habe, jetzt mal mit LCD aber da scheine ich auch Spannungsversorgungsproblem zu haben, dann bricht die Wlan Verbindung ab und ebenso socat. Damit muss ich mich dann noch mehr beschäftigen.
Gruß Karl
Zitat von: Wzut am 04 März 2015, 17:30:51
mit dem ESP8266 und einem lua script uart2tcp hat man ganz schnell die serielle Schnittstelle auf einen TCP Port umgebogen (habe ich gestern Abend erfolgreich mit FHEMduino und JeeLink getestet , ist hier aber OT)
Hallo Wzut,
ich bin durchaus an dem Lua Code interessiert ...
Bitte sehr :
https://github.com/nodemcu/nodemcu-firmware/blob/master/lua_examples/tcp2uart.lua
Den Wald vor lauter Bäume nicht gesehen, doch ich scheitere noch an der Umsetzung. Nach dem Upload mit ESPlorer ist das Funkmodul nicht mehr ansprechbar. Wie sieht dein init.lua Skript aus?
Wieder zurück zum ursprünglichem Topic,
die Lösung mit socat hat sich leider als sehr instabil erwiesen, aus für mir nicht nachvollziehbaren Gründen wurde auch der fhem Prozess blockiert bzw. beendet, leider ohne irgendwelche Hinweise auf die Ursache, oder die Chance irgendetwas sinnvolles aus den traces herauszulesen. Das passierte so alle 4-8 Stunden. Nach Deaktivieren der Firmata Devices läuft FHEM seit zwei Wochen wieder stabil. Die Abstürze haben mich dann endlich dazu genötigt dass ich mal eine Test Instanz aufsetze (hatte ich eigentlich schon seit zwei Jahren vor), dort kann ich jetzt nach Lust und Laune herumspielen.
Ich habe jetzt einfach mal das Wlan Module als Client konfiguriert und das FHEM Device als Server.
define NANO FRM 3030 global
attr NANO i2c-config 1
attr NANO room development
attr NANO verbose 4
und siehe da, das läuft jetzt seit mehreren Tagen ohne Probleme mit dem Versuchsaufbau im angehängten Foto.
Um die Produktiv Instanz und Test Instanz zu "verbinden" habe ich MQTT verwendet, also mit mosquitto als Broker. Die Daten die im Display angezeigt werden sind also Echtdaten die über MQTT_Bridge gepushed werden und in der Testinstanz ausgewertet werden. Dank 39_DLCD von epsrw1 http://forum.fhem.de/index.php/topic,24519.0.html (http://forum.fhem.de/index.php/topic,24519.0.html) sind die LCD Zeilen sehr einfach zu konfigurieren.
Internals:
CFGFN
NAME LCD_1
NR 178278
NTFY_ORDER 50-LCD_1
STATE <br>13:28 Aussen: 10.4°C<br>BR: >45°C <46°C 96%<br>WG: >32°C <34°C 0%<br>Mischer: >23°C <23°C
TYPE DLCD
Readings:
2015-03-28 13:28:06 Line1 13:28 Aussen: 10.4°C
2015-03-28 13:26:24 Line2 BR: >45°C <46°C 96%
2015-03-28 13:27:44 Line3 WG: >32°C <34°C 0%
2015-03-28 12:14:36 Line4 Mischer: >23°C <23°C
2015-03-28 13:28:06 state 13:28:06
Attributes:
dlcdCols 20
dlcdLine1 %time_h%:%time_m% Aussen: %1%°C
dlcdLine2 BR: >%2%°C <%3%°C %4%
dlcdLine3 WG: >%5%°C <%6%°C %7%
dlcdLine4 Mischer: >%8%°C <%9%°C
dlcdReplaceRegex °=ß
dlcdRows 4
dlcdVal1 Outdoor_Weather:temperature
dlcdVal2 c_HEIZUNG_Brenner_VL:temperature
dlcdVal2formatnum 2+0
dlcdVal3 c_HEIZUNG_Brenner_RL:temperature
dlcdVal3formatnum 2+0
dlcdVal4 Heizung_Keller:actuator
dlcdVal4formatnum 2+0
dlcdVal5 c_HEIZUNG_WG_VL:temperature
dlcdVal5formatnum 2+0
dlcdVal6 c_HEIZUNG_WG_RL:temperature
dlcdVal6formatnum 2+0
dlcdVal7 Heizung_WG:actuator
dlcdVal8 c_HEIZUNG_Mischer_VL:temperature
dlcdVal8formatnum 2+0
dlcdVal9 c_HEIZUNG_Mischer_RL:temperature
dlcdVal9formatnum 2+0
room development
stateFormat <br>Line1<br>Line2<br>Line3<br>Line4
mit einem MQTT_Bridge Device publishe ich die vier Zeilen
Internals:
CFGFN
DEF LCD_1
IODev MQTT
NAME MQTT_LCD_1
NOTIFYDEV LCD_1
NR 182995
NTFY_ORDER 50-MQTT_LCD_1
STATE outgoing publish acknowledged
TYPE MQTT_BRIDGE
qos 1
retain 1
Readings:
2015-03-28 13:28:26 transmission-state outgoing publish acknowledged
Message_ids:
Publishreadings:
Line1 /LCD_1/Line1
Line2 /LCD_1/Line2
Line3 /LCD_1/Line3
Line4 /LCD_1/Line4
state /LCD_1/state
subscribe:
subscribeExpr:
Attributes:
IODev MQTT
publishReading_Line1 /LCD_1/Line1
publishReading_Line2 /LCD_1/Line2
publishReading_Line3 /LCD_1/Line3
publishReading_Line4 /LCD_1/Line4
publishReading_state /LCD_1/state
qos at-least-once
retain 1
room MQTT
stateFormat transmission-state
Auf der Test Instanz habe ich ein MQTT_Device (quasi ein gespiegeltes Device der produktiven Instanz)
Internals:
IODev MQTT
NAME LCD_1
NR 99
STATE 13:32 Aussen: 10.4°C <br>BR: >38°C <41°C 96% <br>WG: >32°C <34°C 0% <br>Mischer: >23°C <23°C
TYPE MQTT_DEVICE
qos 0
retain 0
Readings:
2015-03-28 13:32:08 Line1 13:32 Aussen: 10.4°C
2015-03-28 13:32:18 Line2 BR: >38°C <41°C 96%
2015-03-28 13:27:44 Line3 WG: >32°C <34°C 0%
2015-03-28 12:14:37 Line4 Mischer: >23°C <23°C
2015-03-28 13:32:18 transmission-state incoming publish received
Message_ids:
Sets:
subscribe:
/LCD_1/+
/LCD_1/Line1
/LCD_1/Line2
/LCD_1/Line3
/LCD_1/Line4
subscribeExpr:
^\/LCD_1\/([^/]+)$
^\/LCD_1\/Line1$
^\/LCD_1\/Line2$
^\/LCD_1\/Line3$
^\/LCD_1\/Line4$
Subscribereadings:
/LCD_1/Line1 Line1
/LCD_1/Line2 Line2
/LCD_1/Line3 Line3
/LCD_1/Line4 Line4
Attributes:
IODev MQTT
autoSubscribeReadings /LCD_1/+
event-on-update-reading Line.*
room development
stateFormat Line1 <br>Line2 <br>Line3 <br>Line4
subscribeReading_Line1 /LCD_1/Line1
subscribeReading_Line2 /LCD_1/Line2
subscribeReading_Line3 /LCD_1/Line3
subscribeReading_Line4 /LCD_1/Line4
und ein notify das geänderte Zeilen aus das LCD Display schreibt.
LCD_1:Line.* {
my $state = $EVENT;
Log 3, "set LCD1: $EVENT";
if ($state =~ m/Line1/i)
{my $ZeileNo = "1";
my $Zeile = ReadingsVal ("LCD_1","Line$ZeileNo","error");
fhem "set NANO_I2C_LCD writeXY 0,0,20,1 $Zeile";
}
if ($state =~ m/Line2/i)
{my $ZeileNo = "2";
my $Zeile = ReadingsVal ("LCD_1","Line$ZeileNo","error");
fhem "set NANO_I2C_LCD writeXY 0,1,20,1 $Zeile";
}
if ($state =~ m/Line3/i)
{my $ZeileNo = "3";
my $Zeile = ReadingsVal ("LCD_1","Line$ZeileNo","error");
fhem "set NANO_I2C_LCD writeXY 0,2,20,1 $Zeile";
}
if ($state =~ m/Line4/i)
{my $ZeileNo = "4";
my $Zeile = ReadingsVal ("LCD_1","Line$ZeileNo","error");
fhem "set NANO_I2C_LCD writeXY 0,3,20,1 $Zeile";
}
}