Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Projekt "Playbox" MQTT, RFID, Login mit Username und PW

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Hoody B last edited by

      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???

      M 1 Reply Last reply Reply Quote 0
      • M
        MCU @Hoody B last edited by MCU

        @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(".");
          }
        
        
        H 1 Reply Last reply Reply Quote 0
        • H
          Hoody B @MCU last edited by

          @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?

          M 1 Reply Last reply Reply Quote 0
          • M
            MCU @Hoody B last edited by

            @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();
            
            M 1 Reply Last reply Reply Quote 0
            • M
              MCU @MCU last edited by

              @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

              H 1 Reply Last reply Reply Quote 0
              • H
                Hoody B @MCU last edited by

                @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 😞

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                902
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                javascript
                2
                6
                196
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo