NEWS

Projekt "Playbox" MQTT, RFID, Login mit Username und PW

  • Starter

    Hallo, ich versuche gerade das Youtube-Projekt "Playbox" von Hausautomatisierung/M. Kleine nachzubauen: Spotify-Songs per RFID-Tags abspielen.
    Statt fhem und mosquitto möchte ich allerdings den iobroker (und den mqtt-Adapter) auf dem Raspberry nutzen, da ich diese schon aufgesetzt habe.

    Das Script von M. Kleine sieht wie folgt aus:

    #include <Arduino.h>
    #include <SPI.h>
    #include <MFRC522.h>
    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <PubSubClient.h>
    
    #define SS_PIN D8
    #define RST_PIN D1
    
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    unsigned long cardId = 0;
    
    WiFiClient net;
    PubSubClient client(net);
    
    const char* mqtt_server = "192.168.44.11";
    // WLAN name and pw
    const char* ssid = "myWLAN";
    const char* password = "myPW";
    
    void setup() {
      Serial.begin(9600);
      SPI.begin();
      mfrc522.PCD_Init();
    
      WiFi.mode(WIFI_AP_STA);
      WiFi.begin(ssid, password);
    
      client.setServer(mqtt_server, 1883);
    }
    
    void reconnect() {
      while (WiFi.waitForConnectResult() != WL_CONNECTED) {
        WiFi.begin(ssid, password);
      }
    
      while (!client.connected()) {
        String clientId = "NodeMCUClient-";
        clientId += String(random(0xffff), HEX);
    
        if (!client.connect(clientId.c_str(), "mymqttUsername", "mymqttPW")) {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          delay(5000);
        }
      }
    }
    void loop() {
      reconnect();
    
      if (!mfrc522.PICC_IsNewCardPresent()) {
        return;
      }
    
      if (!mfrc522.PICC_ReadCardSerial()) {
        return;
      }
    
      cardId = getCardId();
    
      Serial.print("New ");
      Serial.println(cardId);
    
      char buffer[10];
      sprintf(buffer, "%lu", cardId);
      client.publish("/SmartHome/Interface/PlayBox/Play", buffer);
    
      uint8_t control = 0x00;
    
      do {
        control = 0;
        for (int i = 0; i < 3; i++) {
          if (!mfrc522.PICC_IsNewCardPresent()) {
            if (mfrc522.PICC_ReadCardSerial()) {
              control |= 0x16;
            }
    
            if (mfrc522.PICC_ReadCardSerial()) {
              control |= 0x16;
            }
    
            control += 0x1;
          }
    
          control += 0x4;
        }
    
        delay(0);
      } while (control == 13 || control == 14);
    
      reconnect();
    
      Serial.println("Removed");
      client.publish("/SmartHome/Interface/PlayBox/Stop", "1");
      delay(500);
    
      mfrc522.PICC_HaltA();
      mfrc522.PCD_StopCrypto1();
    }
    
    unsigned long getCardId() {
      byte readCard[4];
      for (int i = 0; i < 4; i++) {
        readCard[i] = mfrc522.uid.uidByte[i];
      }
    
      return (unsigned long)readCard[0] << 24
        | (unsigned long)readCard[1] << 16
        | (unsigned long)readCard[2] << 8
        | (unsigned long)readCard[3];
    

    Über VSC/PlattformIO kann ich den Code kompilieren und übertragen.
    Die Nodemcu meldet sich dann auch korrekt im WLAN an - sehe ich in der Fritzbox.

    Allerdings sehe ich keine topics unter Objekte/mqtt.

    Statt dessen bekomme ich im Terminal von VSC/PlattformIO:
    --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    �HQȸ>dI��@>l�␒�failed, rc=-2 try again in 5 seconds
    failed, rc=-2 try again in 5 seconds
    failed, rc=-2 try again in 5 seconds
    failed, rc=-2 try again in 5 seconds
    ...

    Im Log des iobrokers kommen Meldungen im Millisec.-Takt (auch wenn ich mit Arduino 1.8.13 die Nodemcu bespiele):

    mqtt.0 2020-11-06 19:27:33.268 info (1360) send2Server system.adapter.mqtt.0.cputime[system/adapter/mqtt/0/cputime]
    mqtt.0 2020-11-06 19:27:33.259 info (1360) send2Server system.adapter.mqtt.0.cpu[system/adapter/mqtt/0/cpu]
    mqtt.0 2020-11-06 19:27:33.241 info (1360) send2Server mqtt.0.info.connection[info/connection]
    mqtt.0 2020-11-06 19:27:33.238 info (1360) send2Server system.adapter.mqtt.0.cputime[system/adapter/mqtt/0/cputime]
    mqtt.0 2020-11-06 19:27:33.228 info (1360) send2Server system.adapter.mqtt.0.cpu[system/adapter/mqtt/0/cpu]
    mqtt.0 2020-11-06 19:27:33.209 info (1360) send2Server mqtt.0.info.connection[info/connection]

    Über mqtt.fx als client kann ich den mqtt-Server ohne Probleme mit den selben Zugangsdaten ansprechen und sehe die topics.
    Habe keine Idee mehr wo ich den Fehler mache, aber irgendwas beim Login auf den mqtt scheint ja nicht zu passen 😞
    Hat vielleicht jemand eine Idee???

  • Starter

    Hoody B Fehlt in dem Programm nicht ein client.begin()? Ich sehe es gerade nicht! Nein!
    Ich hab das bei mir in der loog()

    if (!client.connected()) {
        reconnect();
      }
      client.loop();
    

    Und dieses zwischen

    WiFi.begin(ssid, password);
    --->
    client.setServer(mqtt_server, 1883);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
    
  • Starter

    MCU Danke für deine Antwort. Bin leider kein Code-Crack, sondern wollte eigentlich nur das fertige Script nutzen. Wo soll ich denn das Erste einfügen? Wie gesagt der Wifi-Connect funktioniert nur der Login auf den MQTT-Server Adapter nicht.
    Ist es denn ein Unterschied, ob ich einen mosquitto auf dem Raspi "direkt" installiere oder auf mich über Adapter im iobroker auf den MQTT einlogen möchte?

  • Starter

    Hoody B Das muss in die loop()-Funktion. Und einige bevorzugen den mosquitto als Server. Persönlich habe ich keinen.

    void loop() {
      if (!client.connected()) {
        reconnect();
      }
      client.loop();
    
  • Starter

    MCU Stimmt denn der Port überein, oder noch den Sonoff installiert? Musste den Port bei mir auch umstellen, wegen Sonoff-Adapter:

    e40efb47-e7a0-41ba-80d7-778cff69335c-image.png

  • Starter

    MCU ...leider ist das nicht das Problem - habe auch keinen sonoff installiert, trotzdem mal auf 1886 geändert, hatte aber nichts gebracht. Dachte diese Meldungen im ms-Takt wären vielleicht ein Hinweis 😞

Suggested Topics

  • 4
  • 320
  • 7
  • 5
  • 20
  • 1
  • 4
  • 5

542
Online

34.6k
Users

40.7k
Topics

557.3k
Posts