Firmata over WLAN mit HLK-RM04

Begonnen von schka17, 03 März 2015, 20:58:48

Vorheriges Thema - Nächstes Thema

schka17

Hallo,

inspiriert von diesem Beitrag 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 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
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

fhem-challenge

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


schka17

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
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

Wzut

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.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

schka17

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
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

locutus

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 ...

Wzut

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

locutus

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?

schka17

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 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";
}
}




M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000