Torantrieb Status ermitteln

Begonnen von TiPpFeHlEr, 28 September 2018, 18:39:03

Vorheriges Thema - Nächstes Thema

TiPpFeHlEr

Hi Leute,

ich möchte meinen Torantrieb in Fhem integrieren, und zb. den Status auswerten und mit Telegram verschicken.
Dazu hat die Torsteuerung einen Ausgang "Kontrollleuchte" -> diese ist wenn
Tor zu = aus
Tor auf = an
Tor fährt zu = blinkt 2 Hz
Tor fährt auf = blinkt 1 Hz

Der Status auf & zu ist klar.
Leider würde nun immer wenn das Tor fährt abwechselnd der Status auf / zu erkannt werden.

also wollte ich mit dem Modul HourCounter, die Puls Zeiten des blinkens erkennen und daraus ein DOIF machen und erkennen ob es blinkt oder nicht.
leider geht dies nicht, da das Modul min 1 Sekunde Pulsezeiten erkennt.

Nun die Frage, gibt es dafür ein anderes Modul?

Ich bräuchte mindestens 3 Status Erkennungen
1. aus = Tor geschlossen
2. blinkt/pulse = Tor fährt
3. an = Tor offen

Ich wäre über eure Hilfe sehr dankbar

MfG Maik

Markus

Je nach Hardware kannst du villeicht nur alle 30 Sekunden abfragen je nach dem wie lange dein Tor fährt dann wird das blinken einfach übersprungen
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

KölnSolar

Guck Dir ml hier die Funktionen ReadingsAge, OldValue, OldTimestamp.... an. Die lassen sich recht gut in zyklischen at's oder notify oder userreadings oder .... nutzen, um die Zeit seit der letzten Änderung zu ermitteln und darauf unterschiedlich zu reagieren. 
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

TiPpFeHlEr

habs jetze erstmal mit nem WemosD1 und MQTT gelöst.
Der Wemos wertet das Signal aus und sendet entsprechende MQTT Messages

hier mal der Arduino Code für alle Interessierten.

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid = "SSID";
const char* password = "PASSWD";
const char* mqtt_server = "xxx.xxx.xxx.xxx";
const char* Topic ="/WemosD1/Tor/";//############# Subscribe Topic
const char* Pub ="/WemosD1/Tor/state";//########## Publish message
const char* Device="WemosD1_Tor";//#################### mqtt device name

WiFiClient espClient;
PubSubClient client(espClient);

String state_str;
char State[50];


unsigned long T;          //Periodendauer in us
int out_open = D8;
int out_move = D7;
int out_close = D6;

void setup()
{Serial.begin(9600);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);

pinMode(D3, INPUT_PULLUP);
pinMode(out_open, OUTPUT);
pinMode(out_move, OUTPUT);
pinMode(out_close, OUTPUT);
digitalWrite(out_close, LOW);
digitalWrite(out_move, LOW);
digitalWrite(out_open, LOW);
}

void setup_wifi() {

  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(BUILTIN_LED, HIGH);
    delay(450);
          digitalWrite(BUILTIN_LED, LOW);
    delay(50);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
   
  if ((char)payload[0] == '1') {

  } else {
  }


}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect(Device)) {
      Serial.println("connected");
      client.publish("debug", "WemosD1 connected");
      client.subscribe(Topic); //TOPIC !!!!!
      digitalWrite(BUILTIN_LED, HIGH);
    delay(100);
          digitalWrite(BUILTIN_LED, LOW);
    delay(100);
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      delay(5000);
    }
  }
}

void loop(){
    if (!client.connected()) {
    Serial.print("mqtt_reconnect");
    reconnect();
  }
  client.loop();
  digitalWrite(BUILTIN_LED, HIGH);  // Turn the LED off by making the voltage HIGH
   
 
  int input = digitalRead(D3);
  T = pulseIn(D3, HIGH) + pulseIn(D3, LOW);
  if (T==0) {
    if (input==0) {
      Serial.println("Tor offen");
      digitalWrite(out_close, LOW);
      digitalWrite(out_move, LOW);
      digitalWrite(out_open, HIGH);
      state_str = ("Tor offen");
//      state_str = String(state); //converting Humidity (the float variable above) to a string
      state_str.toCharArray(State, state_str.length() + 1); //packaging up the data to publish to mqtt whoa...
    client.publish(Pub, State);

    }
    else{
      Serial.println("Tor zu");
      digitalWrite(out_close, HIGH);
      digitalWrite(out_move, LOW);
      digitalWrite(out_open, LOW);
      state_str = ("Tor zu");
//      state_str = String(state); //converting Humidity (the float variable above) to a string
      state_str.toCharArray(State, state_str.length() + 1); //packaging up the data to publish to mqtt whoa...
    client.publish(Pub, State);

    }
  }
  else{
     Serial.println("Tor fährt");
     digitalWrite(out_close, LOW);
     digitalWrite(out_move, HIGH);
     digitalWrite(out_open, LOW);
     state_str = ("Tor fährt");
//     state_str = String(state); //converting Humidity (the float variable above) to a string
     state_str.toCharArray(State, state_str.length() + 1); //packaging up the data to publish to mqtt whoa...
    client.publish(Pub, State);

  }
}


MfG Maik