Wie kann ich einen Arduino UNO an IPS anbinden und damit Aktionen ausführen??

Guten Abend

Wie kann ich mit IPS die Werte aus dem Aurduino UNO Auslesen und damit aktionen ausführen bzw. ist dies überhaupt möglich??

Wäre cool wenn es geht denn dann hätte ich da viele möglichtkeiten Günstige sensoren zu Installieren.

Vielen Dank im Vorraus

Steffen27

Natürlich ist das möglich. Im einfachsten Fall verbindest Du den Arduino per USB mit dem IPS-PC und kommunizierst per serieller Schnittstelle („Serial Port“).

Hier ist mal ein Beispiel für einen Arduino-Code, der mit IPS kommuniziert.

Es geht natürlich auch viel komplizierter, aber oft reicht so etwas simples ja.

Einen Arduino setze ich z.B. auch mit Ethernet-Shield ein und spreche den per TCP an.

Guten Morgen

das mit dem verbinden des arduino per usb und dann mit Serial Port habe ich verstanden nur wie kann ich jetzt dann die werte auslesen hat da jemand schon ein fertiges skript denn ich bin kein held in php. Vllt sogar von dem Wasserzähler denn daran bin ich interresiert.

Gruß

Steffen27

Hallo sokkederheld,

hättest Du ein Beispiel wie Du mit IP-Symcon über TCP mit dem Arduino (+Ethernet-Shield) kommunizierst (idealerweise Variablen lesen und schreiben, um z.B. Arduino-Ports auszulesen/anzusteuern)?

Schon mal vielen Dank vorab und beste Grüße,

jabodu

#include <SPI.h>
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <util.h>

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x91, 0x4D };  

IPAddress sockets(192, 168, 178, 200);

EthernetServer svr = EthernetServer(23);
EthernetClient wdclient;

#define PORT_MB_SMALL_SLOT 8
#define PORT_MB_LARGE_SLOT 9
#define PORT_MB_DOOR 5

#define MAIL_EMPTY 0
#define MAIL_SMALL 1
#define MAIL_LARGE 2
#define MAIL_SLOT_LEFT_OPEN 4
#define MAIL_DOOR_LEFT_OPEN 8
#define MAIL_ERROR 255

byte mailStatus = MAIL_EMPTY;
byte mailStatusOld = MAIL_ERROR;

byte mailCount = 0;
byte mailCountOld = 255;

byte wdresult = 0;

long statusLoop = 0;
long watchdogLoop = 0;

long countSlotOpen = 0;
long countDoorOpen = 0;

void setup()
{
  Serial.begin(9600);
  Serial.println("SERIAL Init");
  
  while(Ethernet.begin(mac) == 0)
  {
    Serial.println("DHCP Failed, 2s Delay...");
    delay(2000);
  }
  Serial.print("DHCP OK! IP=");
  Serial.println(Ethernet.localIP());
  
  svr.begin();
  
  pinMode(PORT_MB_SMALL_SLOT, INPUT);
  pinMode(PORT_MB_LARGE_SLOT, INPUT);
  pinMode(PORT_MB_DOOR, INPUT);
}

void loop ()
{
  switch(Ethernet.maintain())
  {
    case 1:
      Serial.println("DHCP Renew Failed");
      break;
    case 2:
      Serial.println("DHCP Renew Successful");
      break;
    case 3:
      Serial.println("DHCP Rebind Failed");
      break;
    case 4:
      Serial.println("DHCP Rebind Successful");
      break;
  }
  
  if(digitalRead(PORT_MB_DOOR) == LOW)
  {
    if(countDoorOpen < 250000)
    {
      mailStatus = MAIL_EMPTY;
      countDoorOpen++;
    }
    else
    {
      mailStatus = MAIL_DOOR_LEFT_OPEN;
    }
  }
  else
  {
    countDoorOpen = 0;
    
    if(digitalRead(PORT_MB_LARGE_SLOT) && digitalRead(PORT_MB_SMALL_SLOT))
    {
      countSlotOpen = 0;
      mailStatus &= (MAIL_LARGE + MAIL_SMALL);
    }
    else
    {
      if(countSlotOpen < 250000)
      {
        if(countSlotOpen == 0) mailCount++;
        countSlotOpen++;
      }
      else
      {
        mailStatus |= MAIL_SLOT_LEFT_OPEN;
      }
      if(digitalRead(PORT_MB_LARGE_SLOT) == LOW) mailStatus |= MAIL_LARGE;
      if(digitalRead(PORT_MB_SMALL_SLOT) == LOW) mailStatus |= MAIL_SMALL;
    }
  }
  
  EthernetClient client = svr.available();
  
  if(client == true)
  {
    switch(client.read())
    {
      case 's':
        statusLoop = 100000;
        break;
      case 'e':
        if(countDoorOpen < 250000)
          mailStatus = MAIL_EMPTY;
        else
          mailStatus = MAIL_DOOR_LEFT_OPEN;
        break;
      case 'r':
        mailCount = 0;
        break;
    }
  }
  
  if
  (
    (mailStatus != mailStatusOld) ||
    (mailCount != mailCountOld) ||
    (statusLoop >= 50000)
  )
  {
    svr.print("{\"mail_status\":");
    svr.print(mailStatus);
    svr.print(",\"mail_count\":");
    svr.print(mailCount);
    svr.print(",\"wdresult\":");
    svr.print(wdresult);
    svr.println("}");
    
    statusLoop = 0;
    mailStatusOld = mailStatus;
    mailCountOld = mailCount;
  }
  else statusLoop++;
  
  watchdogLoop++;
  
  if(watchdogLoop >= 50000)
  {
    if(wdclient.connect(sockets, 80))
    {
      wdclient.println("GET /ipsl32.cgi?on_gr=on_gr HTTP/1.1");
      wdclient.println("");
      wdclient.stop();
      wdresult = 1;
    }
    else wdresult = 255;
    
    watchdogLoop = 0;
  }
}

Hier ist mal der Code von meinem Ethernet-Arduino. Im Netz sollte es aber „saubere“ Beispiele geben ohne so viel Klimbim.

Hallo

Hat denn jemand noch eine antwort auf meine Frage ??

gruß

steffen27