ESPeasy

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

Liegt daran, dass aktuell zusätzlich rssi übermittelt wird. Schau dir die Nachricht mal genau an. Das ist ihm Script nicht berücksichtigt.
Ich habe allerdings auch immer leere Nachrichten. Woher die kommen weiß ich nicht.
Ich breche das Script ab sobald die Nachricht leer ist.

und wie brichst du das script dann ab?!
diese fehlermeldung kommt bei jedem sendevorgang den die wemos dinger durchlaufen… ich habe das also in der minute 20 mal im meldungsfenster…

Siehe hier.

PHP Probleme nach Update auf 5.0

Hi,
vielen dank! Ich werde das nachher dann gleich mal umbauen und testen.

Viele Grüße!

Guten Tag,
ich habe einen Sonoff Basic, Sonoff Dual r2 und einen 4CH mit ESPEASY geflasht. Die internen Buttons beim Basic und 4CH nutzte ich zum setzen der GPIOs / Relais. Die Abfrage (s.u.) der Buttons und die Auswertung sind kein Problem. Nun möchte ich den internen Button des Dual zum zurücksetzen eines Zählers nutzen. Wie komme ich an die Daten / den Impuls ??
Vielen Dank fürs durchlesen und vielleicht hat ja jemand eine Idee.
Viele Grüße
Micha

Beispiel Abfrage button:
on System#Boot do //
TaskValueSet 11,1,2 // Toggle Torsteuerung ca 1 …5 Sekunden
endon

on taster#Switch do
if [taster#Switch] = 0
event toggle_tor // gpio,12,1 // Relais an
endif
endon

on toggle_tor do
gpio,12,1 // Relais an
timerSet,1,[SET#Timer_AUS]
endon

on Rules#Timer=1 do
gpio,12,0 // Relais aus
endon

Hallo Leute,

brauche mal Hilfe von einem ESPEasy Experten.

Ich teste im Moment iButton mit ESP8266
In der „Test“ Firmware gibt es eine Device „Input - iButton [TESTING]“

Alles eingerichtet, Reader dran, Läuft :smiley:

In der Device wird die iButton ID ausgewählt. Sobald die ID am Reader hängt, bekommt die Value Name eine 1


Habe in IPS MQTT Script Installiert MQTT Broker in IP-Symcon (Beta…!)

Im IPS kommen alle Daten an außer iButton :confused:
Jetzt habe ich versucht im ESP eine Dummy Device zu erstellen und mit Rules die Daten von iButton zu Dummy Device zu übertragen.

on ibutton#iButton do
 if [ibutton#iButton]=1
    TaskValueSet 2,1,1
 else
    TaskValueSet 2,1,0
 endif
endon

Es passiert einfacht nichts.
Wird als Trigger ein Taster verwendet, läuft dieser Script.

Hoffe ich konnte es verstänlich beschreiben.

Gruß

Hast Du im Protocol Fenster des Controllers im ESP Easy OpenHAB eingestellt?
Dann sollte hierfür eine Variable in Symcon angelegt werden.

Gruß Martin