ESPeasy

Hi,

wenn Du einen funktionsfähigen Ansatz gefunden hast steht es Dir natürlich frei in ESEasy einen eigenen MQTT zu definieren und zu betreiben.

Um die Arbeitsweise zu verstehen wäre ein Blick in die

_C002_DOMOTICS_MQTT
_C005_MQTT und die
_C006_PiDome

hilfreich. Mir persönlich reicht immer noch die HTTP Variante für den Datenaustausch zu IPS.

Hatte aber mal ein paar Zeilen in die ESPEasy.ino integriert um auf eine Anfage hin sämtliche Konfigurationsdaten im json Format für ein denkbares IPS Modul zu erhalten; und war angenehm überrascht wie fix das funktionierte.

mfg

BerndJ

Hallo Leute,

habe mal zum Spielen ein ESP8266 mit DHT22 & BH1750 Sensor gekauft.
ESPeasy drauf, bisschen Löten und schon läufts :smiley: (Cooles Teil)

Dank dem Thread hier, sind die Messwerte auch im IPS.

Jetzt habe ich aber paar Fragen.

DHT22 Temperatur Sensor zeigt 1-2°C mehr als es wirklich ist.

Oder ist das Normal:confused:

Im IPS kommt immer eine Warnung.

13.05.2018 10:39:46 | Register Variable | <br />
<b>Warning</b>:  strpos(): Offset not contained in string in <b>/var/lib/symcon/scripts/23295.ips.php</b> on line <b>17</b><br />
<br />
<b>Warning</b>:  strpos(): Offset not contained in string in <b>/var/lib/symcon/scripts/23295.ips.php</b> on line <b>21</b><br />

Kann ich das irgendwie Abstellen?

Gruß

Hallo Leute,

kann man in den Rules von ESPEasy einen Integer-Wert in einen String umwandeln ?

Hallo Leute,

habe mir zusätlich ein OLED 1,3 Zoll Display besorgt. Funktioniert Super :slight_smile:
Gibt es eine Möglichkeit Daten von IPS an ESP zu schicken?

Gruß

Hi,

immer wieder gerne genommen:

die entsprechende HELP Site.

Hab es zwar aktuell noch nicht probiert, sollte so aber laufen:

<?

// Achtung!!, Leerzeichen mit %20 einfügen, ansonsten ignoriert er den Rest

$Text ="IPS%20Nachricht";

// oder dem Hinweis von NallChan folgen zur Dekodierung

// sollte in Zeile 8 an Position 1 den Variableninhalt anzeigen

Sys_GetURLContent("http://192.168.xxx.xxx/control?cmd=OLED,8,1,".$Text);

?>

Hope it helps

mfg

BerndJ

PS: OLED´s sollten ja mittlerweile von der Helligkeit her langzeitstabil sein, wird zumindest behauptet.
Meine Erfahrungen sehen da ganz anders aus;
also nutze nach Möglichkeit den zusätzlichen Display Button zum Aktivieren der Anzeige.

Hi,

seitdem von der ESP Seite 4 Werte geliefert werden können ist die geänderte Abfrageroutine mit ´nem Fehler belastet; :banghead:
evtl. stolpert ja hier jemand drüber und korrigiert.

Für nicht zeitkritische Anwendungsfälle nutze ich immer häufiger dann doch das Polling per json.

Dieses Script wird jede Minute aufgerufen:

<?

// 1.ter Step: Polling
if (GetValueBoolean(39337 /*[Technik\Tracking\Ping\091]*/)== true){
$json_string = Sys_GetURLContent("http://192.168.113.91/json");  
$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen.
if ($json->Sensors[0]->Voltage != 0) SetValueFloat(21056 /*[Technik\Spielwiese\ESP32-EVB-1\INA219 Li-Po Batterie Spannung]*/, $json->Sensors[0]->Voltage);
SetValueFloat(22739 /*[Technik\Spielwiese\ESP32-EVB-1\INA219 Li-Po Batterie Strom]*/, $json->Sensors[0]->Current*1000);
SetValueFloat(27414 /*[Technik\Spielwiese\ESP32-EVB-1\INA219 Li-Po Batterie Leistung]*/, $json->Sensors[0]->Power*1000);
}
IPS_Sleep(1000);
if (GetValueBoolean(17049 /*[Technik\Tracking\Ping\092]*/)== true){
$json_string = Sys_GetURLContent("http://192.168.113.92/json");  
$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen.
if ($json->Sensors[4]->Voltage != 0) SetValueFloat(38473 /*[Technik\Spielwiese\ESP32-EVB-2\INA219 Li-Po Batterie Spannung]*/, $json->Sensors[4]->Voltage);
SetValueFloat(39181 /*[Technik\Spielwiese\ESP32-EVB-2\INA219 Li-Po Batterie Strom]*/, $json->Sensors[4]->Current*1000);
SetValueFloat(10082 /*[Technik\Spielwiese\ESP32-EVB-2\INA219 Li-Po Batterie Leistung]*/, $json->Sensors[4]->Power*1000);
}
IPS_Sleep(1000);
if (GetValueBoolean(31220 /*[Technik\Tracking\Ping\093]*/)== true){
$json_string = Sys_GetURLContent("http://192.168.113.93/json");  
$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen.
if ($json->Sensors[0]->Voltage != 0) SetValueFloat(30451 /*[Technik\Spielwiese\ESP32-EVB-3\INA219 Li-Po Batterie Spannung]*/, $json->Sensors[0]->Voltage);
SetValueFloat(10069 /*[Technik\Spielwiese\ESP32-EVB-3\INA219 Li-Po Batterie Strom]*/, $json->Sensors[0]->Current*1000);
SetValueFloat(10066 /*[Technik\Spielwiese\ESP32-EVB-3\INA219 Li-Po Batterie Leistung]*/, $json->Sensors[0]->Power*1000);
}

// Entwicklungshilfskrücken:

//print_r($json);
//var_dump($json[0]->System->Sensors[4]->Voltage);  // 1. Route, 1. Objekt legs, Entferung, Text
//var_dump($json->System->Uptime);
//var_dump($json->Sensors[4]->Voltage);
//var_dump($json->Sensors[4]->Current);
//var_dump($json->Sensors[4]->Power);

?>

und fragt 3 Systeme ab.

Zum Spielen einfach mal im Browser:

http://192.168.xxx.xxx/json

eingeben, sich die Struktur anschauen;

hier mal für den 091er:

{"System":{
"Build":20100,
"Git Build":"(custom)",
"Local time":"2018-05-18 14:36:09",
"Unit":1,
"Uptime":4491,
"Free RAM":83004
},
"Sensors":[
{
"tasknr":1,
"TaskName":"INA219",
"Type":"Energy (DC) - INA219",
"Voltage":32.764,
"Current":-0.000,
"Power":-0.002
},
{
"tasknr":2,
"TaskName":"uptime",
"Type":"Generic - System Info",
"":4490
},
{
"tasknr":3,
"TaskName":"WebAccess",
"Type":"Generic - System Info",
"":270061
},
{
"tasknr":4,
"TaskName":"Relais 1",
"Type":"Switch input - Switch",
"Switch":0
},
{
"tasknr":5,
"TaskName":"Relais 2",
"Type":"Switch input - Switch",
"Switch":0
}
]}

und dann sollte sich der zu ändernde Inhalt des Scriptes von selbst ergeben. :rolleyes:

Als erstes wird mit Hilfe von Steiners Script nachgeschaut ob dieses Device im LAN verfügbar ist; nur dann werden die Werte geholt.

Viel Spass beim Basteln wünscht,

mfg

BerndJ

Hallo Leute,
könnte mir jemand bei der Optimierung meiner Ruls helfen ?

Das sind meine Ruls:

on Schalter#SW do
if [Schalter#SW] =1.0
PCFGPIO, 1,1
Publish %sysname%/switch/status/1/,0
endif
if [Schalter#SW] =1.1
PCFGPIO, 1,0
Publish %sysname%/switch/status/1/,1
endif
if [Schalter#SW] =2.0
PCFGPIO, 2,1
Publish %sysname%/switch/status/2/,0
endif
if [Schalter#SW] =2.1
PCFGPIO, 2,0
Publish %sysname%/switch/status/2/,1
endif
if [Schalter#SW] =3.0
PCFGPIO, 3,1
Publish %sysname%/switch/status/3/,0
endif
if [Schalter#SW] =3.1
PCFGPIO, 3,0
Publish %sysname%/switch/status/3/,1
endif
if [Schalter#SW] =4.0
PCFGPIO, 4,1
Publish %sysname%/switch/status/4/,0
endif
if [Schalter#SW] =4.1
PCFGPIO, 4,0
Publish %sysname%/switch/status/4/,1
endif
if [Schalter#SW] =5.0
PCFGPIO, 5,1
Publish %sysname%/switch/status/5/,0
endif
if [Schalter#SW] =5.1
PCFGPIO, 5,0
Publish %sysname%/switch/status/5/,1
endif
if [Schalter#SW] =6.0
PCFGPIO, 6,1
Publish %sysname%/switch/status/6/,0
endif
if [Schalter#SW] =6.1
PCFGPIO, 6,0
Publish %sysname%/switch/status/6/,1
endif

if [Schalter#SW] =7.0
PCFGPIO, 7,1
Publish %sysname%/switch/status/7/,0
endif
if [Schalter#SW] =7.1
PCFGPIO, 7,0
Publish %sysname%/switch/status/7/,1
endif

if [Schalter#SW] =8.0
PCFGPIO, 8,1
Publish %sysname%/switch/status/8/,0
endif
if [Schalter#SW] =8.1
PCFGPIO, 8,0
Publish %sysname%/switch/status/8/,1
endif

endon

es funktioniert. Aber das muss doch auch kürzer gehen.

Ich möchte gern 64 Ausgänge schalten und die entsprechende Rückmeldung bekommen.

Bei 64 Ausgängen wird mir der Platz in den Rules zu klein, und schneller wir es durch diese Menge an Code auch nicht.

Danke

Gerhard

Hi BerndJ,

danke für die Infos :slight_smile:
Das mit dem Display muss ich nocht testen.
Die Daten kommen jetzt via json ins IPS. (Danke für den Script) Endlich keine Fehlermeldungen.

Habe zur zeit 2 ESP mit ESPEasy an Start zum Spielen :smiley:

So sieht mein Script aus.

<?

//ESP 1
if (GetValueBoolean(49714)== true){ 
$json_string = Sys_GetURLContent("http://192.168.178.104/json");
$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen. 
SetValueFloat(44729, $json->Sensors[0]->TaskValues[0]->Value);//Temperature
SetValueFloat(59564, $json->Sensors[0]->TaskValues[1]->Value);//Humidity
SetValueFloat(54792, $json->Sensors[1]->TaskValues[0]->Value);//Lux
SetValueFloat(56939, $json->Sensors[2]->TaskValues[0]->Value);//Temperature
}

//ESP 2
IPS_Sleep(1000); 
if (GetValueBoolean(28613)== true){ 
$json_string = Sys_GetURLContent("http://192.168.178.106/json");
$json = json_decode($json_string);  // $json_string in ein Objekt $json überführen. 
SetValueFloat(19612, $json->Sensors[1]->TaskValues[0]->Value);//Temperature
SetValueFloat(58628, $json->Sensors[1]->TaskValues[1]->Value);//Humidity
SetValueFloat(19177, $json->Sensors[1]->TaskValues[2]->Value);//Pressure
}

?>

Gruß

Hi,

wenn Du jetzt in ESPEasy bei jedem einzelnen Sensor noch einen passenden Namen vergeben würdest anstatt „Value“ wäre es noch übersichtlicher und der Kommentar dazu überflüssig.

mfg

BerndJ

Die Namen im ESPEasy sind vergeben. Die .json sieht bei mir so aus:

"Sensors":[
{
"TaskNumber":1,
"TaskEnabled":"true",
"TaskInterval":10,
"Type":"Display - OLED SSD1306/SH1106 Framed",
"TaskName":"Display"
},
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Temperature",
"NrDecimals":2,
"Value":24.40
},
{"ValueNumber":2,
"Name":"Humidity",
"NrDecimals":2,
"Value":33.09
},
{"ValueNumber":3,
"Name":"Pressure",
"NrDecimals":2,
"Value":1023.20
}],
"TaskNumber":2,
"TaskEnabled":"true",
"TaskInterval":60,
"Type":"Environment - BMx280",
"TaskName":"test"
}
],
"TTL":60000
}

oder mache ich was falsch :confused: :eek:

Gruß

Hi,

welche Firmwarerevision läuft bei Dir drauf?

Hi,

diese habe ich drauf.

Firmware
Build	20102 - Mega
Libraries	ESP82xx Core 2_4_1, NONOS SDK 2.2.1(cfd48f3), LWIP: 2.0.3
GIT version	mega-20180512
Plugins	47 [Normal]
Build Md5	90d76c66402686417d816734f73847d6
Md5 check	passed.
Build time	May 12 2018 02:12:31
Binary filename	firmware.bin

Gruß

Hallo Leute,

Auf ESPEasy unter Devices kann man Dummy Device auswählen.
Kann man mit IPS die Werte ans ESP Schicken?

Hintergrund:

Habe ein OLED Display. Kann auch aus IPS die Werte ans Display schicken.

 <?

// Achtung!!, Leerzeichen mit %20 einfügen, ansonsten ignoriert er den Rest

$Text ="IPS%20Nachricht";

// oder dem Hinweis von NallChan folgen zur Dekodierung

// sollte in Zeile 8 an Position 1 den Variableninhalt anzeigen

Sys_GetURLContent("http://192.168.xxx.xxx/control?cmd=OLED,8,1,".$Text);

?> 

Ich möchte aber die ESPEasy „Framed“ möglichkeit Benutzen.
Wenn ich mit dem Script dazwischen Funke, sieht es ziemlich Blöd aus.

Gruß

Hi,

also wenn ich Dein Problem richtig verstehe: mit Variablen aus ESPEasy existiert das Problem nicht!

Es gibt die Möglichkeit Daten von einem Modul in einem anderen zu nutzen, nennt sich GlobalSync.

Im ersten Modul setzt Du bei einem Sensor die Möglichkeit dessen Daten von anderen nutzen zu lassen.
Sie werden per UDP ins lokale LAN gebrüllt.

Im zweiten Modul wird dessen Empfang erlaubt, siehe Tools --> Advanced.

Und schon kommen Daten von Modul 1 automatisch in Modul 2 an.

Idee:

Mach in IPS einen UDP Port auf und schau Dir die Daten an.
Versuche selber Daten mit diesem ermitteltem Protokoll zu senden.

Zur Not schnappt man sich Hilfsmittel wie Wireshark.

Wenns klappt freuen wir uns auf ein neues Script.

Hope it helps.

mfg

BerndJ

Hi,

hab mir den Quelltext mal angeschaut.

Sieht so aus dass hier vor kurzem eine Änderung erfolgte,
den Aufruf für Dein json Ergebnis hab ich gefunden in
Zeile 3641 ff im Quellcode der Datei WebServer.ino

Probier mal eine ältere Version, für mich war das json Ergebnis sinnvoller.

mfg

BerndJ

Hallo Leute,

habe für mein Problem eine Lösung gefunden :smiley:

Wenn jemand IPS Werte ins ESP Senden möchte:

Eine Dummy Device Erstellen.

Jetzt im ESP ein Rules Erstellen.

on Setpoint do
  TaskValueSet 1,1,%eventvalue%
endon

TaskValueSet 1,1 //die erste 1 ist Task Nummer (Task 1), die zweite 1 ist die Values Position (C1)

Jetzt im IPS ein Script erstellen

<?
$wert = 123;

Sys_GetURLContent("http://192.168.178.104/control?cmd=event,setpoint=".$wert);


?>

Laut ESP Wiki müsste es auch direkt gehen.
https://www.letscontrolit.com/wiki/index.php/Dummy_Device
Hat bei mir aber nicht Funktioniert.

Gruß

EDIT:

ESP mag keine kommas.
Man muss „Komma“ in „Punkt“ umwandeln.

$wert = str_replace(",",".", $wert);

Hallo,

ich möchte den o.g. Sensor mit Hilfe eines NodeMCU ESP8266 ESP-12E (Lua Lolin V3) auslesen.

Der Sensor ist richtig angeschlossen, das Test-Sketch (si1145test) funktioniert und gibt plausible Daten aus.

Ich habe gemäß Anleitung auf Letscontrolit die Firmware (ESP_Easy_mega-20180522_normal_ESP8266_1024.bin) installiert. Der ESP ist im Netz und funktioniert soweit.

Wenn ich nun ein I2C-Scan mache gibt das folgendes Bild

D.h er hat etwas erkannt, aber m.E: nicht das richtige.

ein SI1145 habe ich bei der Internetsuche auch nur für diesen Sensor gefunden (https://www.silabs.com/documents/public/data-sheets/Si1145-46-47.pdf, resp. Overview | Adafruit SI1145 Breakout Board - UV index / IR / Visible Sensor | Adafruit Learning System).

Wenn ich versuche ein Device anzulegen, steht dort kein passendes Device drin

Ich habe auch die aktuellste FW (20180524) installiert: kein Unterschied.

Der Sensor ist nicht in den Liste der unterstützten Sensoren eingetragen (Devices - Let’s Control It), aber in dem Sourcecode ist der SI1145 aufgeführt, daher hatte ich vermutet, das diese Seite möglicherweise nicht ganz aktuell ist.

Es ist mein erster Versuch mit ESPEasy, da habe ich bestimmt einen Fehler gemacht.

Hat jemand eine Idee, was ich probieren oder einen Hinweis, wo ich weiter suchen kann.

Danke
Christian

Nachtrag: ich habe es inzwischen auch mit der „test“ und der „dev“ -Version probiert, da taucht das Device nicht auf.

Ich habe mal Testweise für ein Projekt ESPeasy auf einen (NodeMCU ESP8266 ESP-12E V2) installiert.
Version (mega-20180625 (ESP82xx Core 2_4_1, NONOS SDK 2.2.1(cfd48f3), LWIP: 2.0.3))

Es läuft auch ganz gut, aber in unterschiedlichen Zeiträumen wird die WIFI Verbindung automatisch abgebrochen. Das Programm selber auf dem ESP8266 läuft aber weiter. Was könnte das sein ?
Ist es ein allgemeines Problem vom ESP8266 oder eher von ESPeasy ?

Welches Script ist das ?

Hi,

ESPeasy - Seite 9

Gruß