Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] NFC mqtt in iobroker anwenden

    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

    [gelöst] NFC mqtt in iobroker anwenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Ati last edited by

      Ich habe ein NFC–Modul im Einsatz, welches über mqtt in iobroker eingebunden ist. Im „in“–Kanal wird unter „Wert“ die Nummer des RFID–Chips angezeigt. Das Format ist hier JSON.

      Ich suche nach einer Möglichkeit, hiermit eine Tastfunktion auszulösen.

      Mit Blockly bin ich da noch nicht zum Ziel gekommen. Allein schon die „wenn…mache“ Funktion ist nicht schlüssig. Entweder wird aktualisiert oder geändert als Bedingung. Das verursacht aber das Problem, dass wenn Änderung aktiv ist, chip1 sich einmal anmeldet, dann nur noch über Änderung der Nummer, also z.B. Chip2 wieder aktiv werden kann.

      Andersrum wenn Aktualisierung drin steht, dann kann nur der letzte drin stehende Wert auslösen.

      Außerdem muss wohl JSON erst dekodiert werden, damit iobroker damit etwas anfangen kann. Ich hatte zuerst testweise den gesamten Inhalt von „Wert“ in ein Textblockly eingefügt, was aber keinerlei Funktion hervorrief. Verwende ich ein JSON konvert, dann funktioniert das ebenfalls nicht. Wenn ich mir den Code dazu anschaue, sieht der aber recht sonderbar aus.

      Wie bekomme ich eine Auswertung des Inhaltes von mqtt hin bzw. was ist falsch?

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        @Ati:

        Das Format ist hier JSON. ` Poste doch mal das JSON.

        Ich mag Blockly nicht, deswegen kann ich dir eher mit JS Helfen.

        In JS gibt es die möglichkeit auf jede Änderung zu reagieren, das sieht dann so aus:

        on({id: "in-kanal", change: any}
        	,function(obj){
        		log(obj.state.val)
        	}
        });
        
        1 Reply Last reply Reply Quote 0
        • A
          Ati last edited by

          	{"idx":1,"nvalue":0,"svalue":"305247091"}	
          

          mich interessiert dabei svalue.

          Wenn JS soll mir recht sein. Ich versuche je eh mich da reinzufummeln - auch wenn vieles schwer fällt. 😉

          Hier noch der Blockly Code

           on[({id: 'mqtt.0.domoticz.in', change: "any"}, function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            console.log('value');
            if (getState("mqtt.0.domoticz.in").val == '    {"idx":1,"nvalue":0,"svalue":"30524xxxx"}    ') {
              setState("hm-rpc.2.000218A9916FDA.3"/*Schaltsteckdose test:3*/, true);
              setStateDelayed("hm-rpc.2.000218A9916FDA.3"/*Schaltsteckdose test:3*/, false, 1000, true);
              // RFID 
          

          Auffällig sind für mich zumindest die Leerstellen im GetState

          1 Reply Last reply Reply Quote 0
          • A
            Ati last edited by

            So. Das Problem ist nun gelöst.

            on({id: 'mqtt.0.domoticz.in', change: "any"}, function (obj) {
            
                    var NFC;
            
               //der try ist wichtig, dass der adapter nicht abschmiert bei einem Fehler. Hiermit parsen wir die json in ein object
               try {obj = JSON.parse(getState('mqtt.0.domoticz.in').val);
               } catch (e) {
                       console.error('Cannot parse: ' + getState('mqtt.0.domoticz.in').val);
                       return;
                }
            
               log(obj.svalue);
               NFC = obj.svalue;
            
              if ( NFC === "xxxx47091" || NFC === "xxxx076275" || NFC === "xxxx880515" || NFC === "xxxx213571" || NFC === "xxxx486467" || NFC === "xxxx713987" || NFC === "xxxx057774" ) {
                setState("hm-rpc.2.000218A9916FDA.3.STATE", true);//schaltet Aktor ein
                log("Einschalten ausgeführt");
                setStateDelayed("hm-rpc.2.000218A9916FDA.3.STATE", false, 2000, true);//schaltet Aktor in 1 Sekunde aus und aktiviert Planung für nächste Aktivierung
                log("Ausschalten ausgeführt");
              }
            });
            
            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            467
            Online

            31.7k
            Users

            79.9k
            Topics

            1.3m
            Posts

            2
            4
            703
            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