ESPeasy

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ß

DIESES HIER

bzw. angepasst:

<?

// (C) by IP-Symcon 2009
// Trigger: z.B. alle 5 Minuten

// http://www.ip-symcon.de/forum/threads/7566-%28W%29LAN-Watch-Dog

$Parents = IPS_GetParent($_IPS['SELF']);
foreach(IPS_GetChildrenIDs($Parents) as $item){   // alle Unterobjekte
    $id_info = IPS_GetObject($item);
    $id_typ = $id_info['ObjectType'];
    if ($id_typ == 2){                                      // nur bei Variablen
        $id_adr = $id_info['ObjectInfo'];
        $ping = Sys_Ping($id_adr, 500);             // Ping max. 2 Sek. warten
        if($IPS_SENDER == "Execute") {                     // zum Testen
            echo "IP: $id_adr 
";
            echo "Ping: " .(int)$ping. "

";
        }
        SetValue($item, $ping);                      // Ping-Ergnis speichern
    }
}

?>

Diesen Scriptinhalt hatte ich genommen:


foreach(IPS_GetChildrenIDs($_IPS['SELF']) as $item){   // alle Unterobjekte
    $id_info = IPS_GetObject($item); 
    $id_typ = $id_info['ObjectType']; 
    if ($id_typ == 2){                                      // nur bei Variablen 
        $id_adr = $id_info['ObjectInfo']; 
        $ping = Sys_Ping($id_adr, 1000);                     // Ping max. 2 Sek. warten 
      if($_IPS == "Execute") {                            // zum Testen 
            echo "IP: $id_adr 
"; 
            echo "Ping: " .(int)$ping. "

"; 
        } 
        SetValue($item, $ping);                            // Ping-Ereignis speichern 
    } 
} 

Gruß Helmut

Kann man per Rules das „send to controller“ im Device ein und ausschalten ?

Ich habe eine Counter, der soll aber nicht immer die Werte senden !

Übermittelt jemand über eine Regel die Sensorwerte an IPS?

Über die zB. in #63 gepostete Regel werden die Variablen nicht aufgelöst.

 SendToHTTP XXX.XXX.XXX.XXX,YYYYY,Name=%sysname%&Temperatur=[DHT22#Temperatur]
GET Name=%sysname%&Temperatur=[DHT22#Temperatur] HTTP/1.1<CR><LF>Host: XXX.XXX.XXX.XXX<CR><LF>Connection: close<CR><LF><CR><LF>

Auch über den Befehl „Event“ konnte ich keinen Wert übermitteln, da SentToHTTP laut Doku eigentlich eine feste URL erfordert.

Ich habe diese Devices:


und sende sie so:

on BMP180#Druck do
SendToHTTP 192.168.1.157,3777,/hook/172?Unit=13&Wert=[BMP180#Temp]
SendToHTTP 192.168.1.157,3777,/hook/172?Unit=14&Wert=[BMP180#Druck]
SendToHTTP 192.168.1.157,3777,/hook/172?Unit=15&Wert=[WLAN#RSSI]
SendToHTTP 192.168.1.157,3777,/hook/172?Unit=16&Wert=[Batt#Analog]
endon

Hallo Rainer,

danke für deine Screenshot. Ich sende meine Sensorwerte eigentlich analog zu deinem Beispiel an IPS.
Die Variablen werden trotzdem nicht aufgelöst.

Welche ESP-Version nutzt du denn?
Hast du einen Controller in der Weboberfläche eingerichtet?

Grüße

Albert

Hallo Gemeinde,

Nach 4 Stunden probieren und lesen brauche ich jetzt doch mal Schützenhilfe :slight_smile:

Was will ich machen:
ESP Easy und damit 8 Relais steuern und Rückmeldung an IPS bekommen.

Was geht schon:
Die 8 Relais kann ich mittels IPS wunderbar ein und ausschalten.

Was geht noch nicht:
Die Rückmeldung

Was habe ich bereits eingerichtet:
In Easy ESP den Controller (IPS) mit port 1024
In IPS ein Server Socket und eine Register Variable.
Ein Script in der Registervariable zugewiesen (mit einem Beispielcode aus einem der ersten Posts)
Das Script ist noch nicht angepaßt, und es würde mich auch interessieren, wie das für Relais aussehen würde ?

Allerdings denke ich doch, die Register variable sollte ihren Zeitstempel aktualisieren, wenn ich ein Relais aus IPS schalte. Das tut sie leider nicht…

Was ich denke, woran es liegt:
An mir :slight_smile:
An einer fehlenden „rule“, wobei hier ein Beispiel sehr nett wäre.

Auswertung wäre super für die Relais und eventuell noch uptime (uptime habe ich mit 60 sec Intervall auch eingerichtet)

Vielen lieben Dank für eure Hilfe :slight_smile:
Sascha

EDIT:
Ich habe es nun hinbekommen, dass die Uptime alle 60 Sekunden and den Controller IPS geschickt wird :slight_smile:
Hierbei wird die RegisterVariable auch ausgeführt, und ich habe schön den Wert in IPS…die halbe Miete :slight_smile:
Leider die unwichtigere Hälfte :slight_smile:
Was noch nicht geht, ist den Status der 8 Relais zu bekommen…
Das wäre noch super, aber ich weiß gerade nicht, wo ich da ansetzen soll…Rules ? Aber was muss da drinstehen ?
Wann werden die ausgeführt ? Immer, wenn ich ein Relais von IPS heraus schalte ?
Und wie werte ich das in der Registervariable aus ?

Gibts hier im Forum eigentlich Punkte für die meisten Fragen ??? :slight_smile:

EDITEDIT:

So, hier wäre mal ein „quick&dirty“ Weg, bei dem allerdings die Betonung ganz klar auf „dirty“ liegt !

Ich habe das so gelöst, wie auf den Fotos zu sehen ist, da ich als Rückmeldung von ESP Easy einen String bekomme…eine Boolean hätte es eigentlich getan für mich…
Nachteil ist, das ganze braucht sehr lange…manchmal bis zu 5 Sekunden (Relais schalten aber sofort)
Also nicht die beste Lösung einer Rückmeldung von den Relais…

Hier mal die gesammelten Werke, wäre sehr für Lösungsvorschläge offen :slight_smile:

r1.jpg

r2.jpg

Und hier die Registervariable:

<?

//IPS_LogMessage("Sender ", $_IPS['SENDER']);

if ($_IPS['SENDER'] == 'RegisterVariable'){
    $data = $_IPS['VALUE'];

    $Prefix1 = "&idx=";                                    // damit fängt der Datensatz an
    $Suffix1 = "&";
    $Prefix2 = "&svalue=";                                    // damit fängt der Datensatz an
    $Suffix2 = "HTTP/1.1";
    $Prefix3 = "&switchcmd=";                                    // damit fängt der Datensatz an
    $Suffix3 = "HTTP/1.1";

    //$Ende1nachZeichen = 2;                                       // und ist xx Zeichen lang
    $AnfangID = strlen($Prefix1)+(strpos($_IPS['VALUE'], $Prefix1));
    $EndeID = strpos($_IPS['VALUE'], $Suffix1, $AnfangID+1);
    $ID = substr($_IPS['VALUE'], $AnfangID, $EndeID-$AnfangID);

    $AnfangValue = strlen($Prefix2)+(strpos($_IPS['VALUE'], $Prefix2));
    $EndeValue = strpos($_IPS['VALUE'], $Suffix2, $AnfangValue);
    $Value = substr($_IPS['VALUE'], $AnfangValue, $EndeValue-$AnfangValue-1);

    $AnfangSw = strlen($Prefix3)+(strpos($_IPS['VALUE'], $Prefix3));
    $EndeSw = strpos($_IPS['VALUE'], $Suffix3, $AnfangSw);
    $Switch = substr($_IPS['VALUE'], $AnfangSw, $EndeSw-$AnfangSw-1);
    //IPS_LogMessage("Switch roh: ", $Switch);

    if($Switch == "On"){
       $Switch = true;
   }
    else{
         $Switch = false;
   }

    //IPS_LogMessage("Data rin: ", $data);
    //IPS_LogMessage("AnfangID: ", $AnfangID);
    //IPS_LogMessage("EndeID: ", $EndeID);
    //IPS_LogMessage("EndeValue: ", $EndeValue);
    //IPS_LogMessage("IDx: ", $ID);
    //IPS_LogMessage("Value: ", $Value);
    //IPS_LogMessage("Switch: ", $Switch);


    switch ($ID) {
	
		 case "1": // Status Relais 01
		 	 if ($Value == "n.htm?type=command&param=switchlight&idx=1&switchcmd=On&rssi=6") {
			 SetValueBoolean(42939 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Garten\Status Relais\Relais 01]*/,1);
			 }
			 
			 if ($Value == "n.htm?type=command&param=switchlight&idx=1&switchcmd=Off&rssi=6") {
			 SetValueBoolean(42939 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Garten\Status Relais\Relais 01]*/,0);
			 }
			 break;
		 
		 case "2": // Status Relais 02
		
		 	 if ($Value == "n.htm?type=command&param=switchlight&idx=2&switchcmd=On&rssi=6") {
			 SetValueBoolean(12309 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Garten\Status Relais\Relais 02]*/,1);
			 }
			 
			 if ($Value == "n.htm?type=command&param=switchlight&idx=2&switchcmd=Off&rssi=6") {
			 SetValueBoolean(12309 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Garten\Status Relais\Relais 02]*/,0);
			 }
			 break;		
	
         case "101": // Uptime
             SetValueInteger(42387 /*[Entwicklungsbereich Sascha\HTTP Commands Relais\Programm/Scripte\ESP Easy Garten\Uptime in Minuten]*/, $Value);
         break;
         
    }
}

?>

Hi,

probier doch einfach mal den Weg über json Rückgabewerte, die lassen sich hervorragend einzelnen Variablen zuweisen, hab ich HIER mal etwas dargestellt. Und die Frage nach der ersten if Abfrage ist einige Beiträge dahinter beantwortet.

mfg

BerndJ

PS:
funktioniert auch beim Schalten:
einfach mal den Befehl im Browser eingeben und schon siehste (nach kurzer Infektionszeit durch Lerneffekte) wie die Zuweisung aussehen müsste.
Obwohl das OOP ist und bei den meisten im Anfangsstadium Knoten in den Gehirnwindungen erzeugt. :o

Danke für die Antwort und Tips…ganz schön viel zu tun :slight_smile:

Ich hab mal die json Zeile (http://192.168.123.41/json) mit dem Browser probiert.
Nur leider finde ich da nichts über die gpio ports…
Ich versuche ja eigentlich nur eine Rückmeldung der gpio ports, an denen die Relais hängen zu bekommen…
Oder hab ich da etwas übersehen ?

LG
Sascha

Hi,

je nach verwendeter Firmware des ESPEasy gibt es meistens json Rückmeldungen.

Ich hab da Sonoff Pows im Einsatz, denen sende ich:

http://192.168.114.20/control?cmd=GPIO,12,1

und es gibt die Antwort:

{
„log“: „GPIO 12 Set to 1“,
„plugin“: 1,
„pin“: 12,
„mode“: „output“,
„state“: 1
}

also ideal um sie per json zuzuweisen.

Bei den von mir hingegen geflashten ESP32 kommt als Antwort nix, kannste also vergessen, weil es in der Firmware raus genommen wurde.

In der Vergangenheit hab ich schon mal den Programmaufruf /json kopiert, die Kopie /jsonext genannt und bei der Antwort alle Parameter welche ich haben wollte integriert. War die ideale Basis für ein Modul, denn er schmiss Dir alle Parameter und Werte quasi vor die Füsse.

Ich bevorzuge für Relaiskarten den MCP23017, was wird von Deiner Seite eingesetzt?

mfg

BerndJ

PS: wenn von Deiner Seite unter Devices ein Switch (hier GPIO12)

auf den entsprechenden Ausgangspin gesetzt wird siehst Du bei Aufruf durch /json

auch den zugehörigen Status.

ich habe die NodeMCU Lolin im Einsatz…

Hallo,

ich möchte gerne in die ESP Welt einsteigen.
Mein erstes Projekt ist die Steuerung meines neuen Garagentors. Dazu habe ich die Erweiterung UAP1 von Hörmann bestellt.

Für die Stromversorgung stehen mir seitens der UAP1 24V zur Verfügung. Da brauche ich einen Stepdown Spannungswandler.

Die Torendlage wird mittels potentialfreiem Relaisausgang an der UAP1 signalisiert. Diese beiden würde ich direkt an einen Wemos D1 mini anschließen und als Switch Input konfigurieren. Die Meldung sollte dann direkt an Symcon übermittelt werden. Das funktioniert mittels Registervariable und dem geposteten Script.

Das fahren des Tors braucht für jede Richtung einen Ausgang. Die Eingänge der UAP1 für das Fahren des Tors sollen auf Masse gezogen werden. Dabei wird ein Relais/Transistor benötigt, denn beim Schliessen liegen an diesem Eingang 21V bei einem Strom von 4,8mA an. Und dann brauchts wohl auch noch pulldown Widerstände damit beim booten des ESP nichts geschaltet wird.

Könnt Ihr mir bitte sagen, ob ich die ESP Seite richtig verstanden habe?
Das Auslesen der Endlage des Tors traue ich mir zu, das Schalten im Moment nicht. Allerdings habe ich einen Homematic Aktor der direkt am Antrieb toggelt. Ich glaube den lasse ich dort.

Die Infos habe ich zum größten Teil aus aus diesem Blog:
http://majorshark.de/index.php/13-hoermann-torantrieb-mit-espeasy-in-fhem-einbinden

Danke für die Hilfe, Sebastian

Hallo,
hat schon jemand das Problem mit der Fehlermeldung, verusacht durch das Auswertescript gelöst? Ich bin da wohl zu dämlich zu…

29.09.2018, 18:32:42 | Register Variable | <br />
<b>Warning</b>: strpos(): Offset not contained in string in <b>/var/lib/symcon/scripts/32651.ips.php</b> on line <b>19</b><br />
<br />
<b>Warning</b>: strpos(): Offset not contained in string in <b>/var/lib/symcon/scripts/32651.ips.php</b> on line <b>23</b><br />
<br />
<b>Warning</b>: strpos(): Offset not contained in string in <b>/var/lib/symcon/scripts/32651.ips.php</b> on line <b>27</b><br />

Wäre für Hilfe dankbar. Das Script funktioniert zwar, aber die ständige Fehlermeldung ist doch sehr nervig.

Viele Grüße