Ankündigung

Einklappen
Keine Ankündigung bisher.

MQTT API Server und MQTT Clients - LBS19001051 - LBS19001054

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • NurMa
    antwortet
    Zitat von trollmar Beitrag anzeigen

    Code:
    cd /var/lib/mysql/edomiLive/
    rm mqtt_insert_trigger.TRN
    rm mqtt_update_trigger.TRN
    Genau das war mein Problem, hatte bisher keine Lösung gefunden. Vielen Dank für die Info hier. Damit ist zumindest das Problem mit dem "Trigger already exists" verschwunden.

    Ich werde heute Abend versuchen ob der Publish Baustein damit wieder geht.

    Verzögerungen hatte ich bisher keine nennenswerten. Habe auch alles ohne Filter per mqtt veröffentlicht.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Solche Probleme sind bei mir bislang nicht aufgetreten. Wie sind denn eure EDOMI Server dimensioniert?

    Einen Kommentar schreiben:


  • Nanosonde
    antwortet
    Zitat von trollmar Beitrag anzeigen
    Nanosonde
    Frag mich später nochmal. Grundsätzlich würde ich wohl einen Zentralen Baustein nehmen.
    Das ich jetzt so massive Probleme mit dem Edomi/MQTT Kombi hatte/habe ist das deaktivieren einer Logikseite sehr händisch
    Ich hatte ja zwischendurch auch einmal den Effekt, dass Edomi nicht mehr richtig funktionierte, nachdem der Broker mal kurz von mir beendet wurde.
    Aus diesem Grund habe ich die beiden MQTT Server LBS auch erstmal komplett wieder rausgeschmissen.
    Das ist mir im Produktivsystem zu heikel. Auch wenn das mit den SQL Triggern ja sehr überschaubar ist.

    Schön wäre es, wenn Edomi einfach eine Mini-API für solche besonderen LBS zur Verfügung stellen könnte, so dass man an der DB selbst nicht rumfummeln muss:
    • logic_setKo()
    • logic_getKo()
    • logic_registerKoEventCallBack(callbackFunction( eventType, eventData ) )
      • eventType könnte dann "update, insert, delete" oder sonst was sein.

    Zuletzt geändert von Nanosonde; 27.07.2017, 06:42.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    wie lange dauert es denn bis ein publish im Log des Brokers auftaucht?
    Ist es bei allen Topics so langsam. Müsste ja im Mosquitto Log zu sehen sein.
    Da müsste ja dann einiges los sein, wenn du alles publishst. Jede Sekunde sollte da z.B. die Zeit ankommen.

    Einen Kommentar schreiben:


  • trollmar
    antwortet
    Zitat von jonofe Beitrag anzeigen
    hast du die aktuelle Version der MQTT LBS im Einsatz?
    Publish Server 0.3
    Subscribe Server 0.5


    Ich überlege ob ich mal ein neues System unter Proxmox installieren sollte.
    Um einen Vergleich zu haben.


    ..was kann das nur sein?
    Zuletzt geändert von trollmar; 26.07.2017, 21:38.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    hast du die aktuelle Version der MQTT LBS im Einsatz?

    Einen Kommentar schreiben:


  • trollmar
    antwortet
    Hi,

    Danke Jonofe für die Hilfe!!!!!!


    Teilerfolg zu vermelden.

    Ich habe folgendes gemacht:

    Code:
    cd /var/lib/mysql/edomiLive/
    rm mqtt_insert_trigger.TRN
    rm mqtt_update_trigger.TRN

    und in mysql:

    Code:
    mysql> USE edomiLive;
    [I]Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed[/I]
    
    mysql> DROP TRIGGER IF EXISTS mqtt_insert_trigger;
    [I]Query OK, 0 rows affected, 1 warning (0.00 sec)[/I]
    
    mysql> DROP TRIGGER IF EXISTS mqtt_update_trigger;
    [I]Query OK, 0 rows affected, 1 warning (0.00 sec)[/I]
    
    mysql> CREATE TRIGGER mqtt_insert_trigger AFTER INSERT ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    [I]Query OK, 0 rows affected (0.04 sec)[/I]
    
    
    mysql> CREATE TRIGGER mqtt_update_trigger AFTER UPDATE ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    [I]Query OK, 0 rows affected (0.01 sec)[/I]


    Danach:

    Code:
    mysql> SHOW TRIGGERS;
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    | Trigger             | Event  | Table | Statement                                                 | Timing | Created | sql_mode | Definer        | character_set_client | collation_connection | Database Collation |
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    | mqtt_insert_trigger | INSERT | RAMko | CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value) | AFTER  | NULL    |          | root@localhost | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    | mqtt_update_trigger | UPDATE | RAMko | CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value) | AFTER  | NULL    |          | root@localhost | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    2 rows in set (0.01 sec)
    
    
    
    
    mysql> SHOW PROCEDURE STATUS; show triggers;
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    | Db        | Name         | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    | edomiLive | mqtt_publish | PROCEDURE | root@localhost | 2017-07-26 00:09:04 | 2017-07-26 00:09:04 | DEFINER       |         | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    1 row in set (0.00 sec)
    
    
    
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    | Trigger             | Event  | Table | Statement                                                 | Timing | Created | sql_mode | Definer        | character_set_client | collation_connection | Database Collation |
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    | mqtt_insert_trigger | INSERT | RAMko | CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value) | AFTER  | NULL    |          | root@localhost | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    | mqtt_update_trigger | UPDATE | RAMko | CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value) | AFTER  | NULL    |          | root@localhost | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    2 rows in set (0.00 sec)
    Jetzt läuft der Server Publish LBS

    Leider ist jetzt das Timing Problem wieder da.
    Ich habe mal auf folgenden Topic Subscribed

    edomi/status/internal/26

    Das ist der minuten Trigger von Edomi.
    Es dauert ca. 7 sek bis der Topic bei MQTT.fx ankommt.

    Auch wenn ich, wie oben schon beschrieben, ein Licht via edomi GA schalte dauert es ca. 4 sek bis das Licht an ist.
    Ich glaube irgendwas im LBS oder in der SQL Datenbank zieht die verarbeitung runter.

    CPU ist bei 8% Ram bei 50%

    Auch treten seitdem der mySQL trigger wieder da ist wieder die "RW Err" auf.
    Keine Ahnung womit die zusammenhängen.

    Gibt es irgendeinen Weg herauszusfinden was diese RW Err sind? oder irgendeine andere Idee?

    LG
    Zuletzt geändert von trollmar; 26.07.2017, 21:08.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Das ist wohl exakt dasselbe Problem, dass weiter oben auch schon erwähnt wurde. Es ist leider nie eine Lösung hier dokumentiert worden.
    Aber es ist definitiv die Ursache für das Problem. Ohne Trigger wird kein MQTT publish getriggert.
    Leider weiß ich auch nicht woran das liegt und wie man mysql da wieder auf die Sprünge helfen kann.

    Einen Kommentar schreiben:


  • trollmar
    antwortet
    Zitat von jonofe Beitrag anzeigen
    Mach mal das was in #64 beschrieben ist. Und das mal posten.
    Dann sieht man ob procedure und trigger angelegt werden.
    OK.

    Code:
    mysql> USE edomiLive;
    
    Reading table information for completion of table and column names
    
    You can turn off this feature to get a quicker startup with -A
    
    
    
    
    Database changed
    
    mysql> SHOW PROCEDURE STATUS; show triggers;
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    | Db        | Name         | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    | edomiLive | mqtt_publish | PROCEDURE | root@localhost | 2017-07-26 00:09:04 | 2017-07-26 00:09:04 | DEFINER       |         | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    1 row in set (0.00 sec)
    
    
    
    
    Empty set (0.00 sec)
    Code:
    ls -la /usr/local/edomi/www/data/liveproject/lbs/*1051.php
    
    -rw-r--r-- 1 root root 3293 26. Jul 00:08 /usr/local/edomi/www/data/liveproject/lbs/EXE19001051.php
    
    -rw-r--r-- 1 root root 4844 26. Jul 00:08 /usr/local/edomi/www/data/liveproject/lbs/LBS19001051.php
    Sieht aufjedenfall anders aus als vor meinem Backup restore (siehe Beitrag #91)
    Im Beitrag #91 hatte ich noch triggers?!

    Habe jetzt nochmal versucht

    Code:
    mysql
    USE edomiLive;
    DROP TRIGGER IF EXISTS mqtt_insert_trigger;
    DROP TRIGGER IF EXISTS mqtt_update_trigger;
    CREATE TRIGGER mqtt_insert_trigger AFTER INSERT ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    CREATE TRIGGER mqtt_update_trigger AFTER UPDATE ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    SHOW TRIGGERS;
    auszuführen.

    Bei
    Code:
    mysql> DROP TRIGGER IF EXISTS mqtt_insert_trigger;
    
    ERROR 1360 (HY000): Trigger does not exist
    mysql> CREATE TRIGGER mqtt_insert_trigger AFTER INSERT ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    
    ERROR 1359 (HY000): Trigger already exists
    Der Trigger existiert nicht und irgendwie doch?
    Zuletzt geändert von trollmar; 26.07.2017, 18:38.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Mach mal das was in #64 beschrieben ist. Und das mal posten.
    Dann sieht man ob procedure und trigger angelegt werden.

    Einen Kommentar schreiben:


  • trollmar
    antwortet
    Zitat von jonofe Beitrag anzeigen
    Wenn der Publish Server läuft und du keine Filter angelegt hast, dann sollte im Mosquitto Broker Log die Post abgehen.
    Passiert das?
    Hier mal ein Ausschnitt aus dem LOG

    Code:
    /var/log/mosquitto/
    cat mosquitto.log

    Code:
    1501086288: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086288: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086291: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086291: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086348: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086348: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086351: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086351: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086408: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086408: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086411: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086411: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086468: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086468: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086471: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086471: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086528: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086528: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086531: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086531: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086541: New connection from 192.168.10.2 on port 1883.
    
    1501086541: New client connected from 192.168.10.2 as 2f41287809dd43d5ac5a9da818fa673d (c1, k60, u'edomi').
    
    1501086541: Sending CONNACK to 2f41287809dd43d5ac5a9da818fa673d (0, 0)
    
    1501086588: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086588: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086591: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086591: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086611: Received PINGREQ from 2f41287809dd43d5ac5a9da818fa673d
    
    1501086611: Sending PINGRESP to 2f41287809dd43d5ac5a9da818fa673d
    
    1501086648: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086648: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086651: Received PINGREQ from mqtt_ae676026.5198a
    
    1501086651: Sending PINGRESP to mqtt_ae676026.5198a
    
    1501086700: Client 2f41287809dd43d5ac5a9da818fa673d has exceeded timeout, disconnecting.
    
    1501086700: Socket error on client 2f41287809dd43d5ac5a9da818fa673d, disconnecting.
    
    1501086708: Received PINGREQ from EDOMI MQTT Subscribe Server (180)
    
    1501086708: Sending PINGRESP to EDOMI MQTT Subscribe Server (180)
    
    1501086711: Received PINGREQ from mqtt_ae676026.5198a
    Ich sehe hier nichts vom Publish Client (zumindest taucht der Name nicht auf)
    Der "neue Client" ist sicher MQTT.fx auf dem Macbook




    Hier der LBS mit Standart einstellungen

    sdas.jpg


    Komisch das MQTT.fx (http://www.mqttfx.org/) allerdings Publish Topics sieht.
    Dies könnte natürlich auch ein "Echo" aus Zeiten sein wo der LBS lief aber nicht genutzt worden ist.

    mgtt.fx.jpg


    Was kann ich tuen?
    Sollte ich die Server Publish LBS installation nochmal durchführen?
    Danke
    LG
    Zuletzt geändert von trollmar; 26.07.2017, 18:07.

    Einen Kommentar schreiben:


  • jonofe
    antwortet
    Wenn der Publish Server läuft und du keine Filter angelegt hast, dann sollte im Mosquitto Broker Log die Post abgehen.
    Passiert das?

    Einen Kommentar schreiben:


  • trollmar
    antwortet
    Zitat von trollmar Beitrag anzeigen

    Ich denke darüber nach mal auf ein Backup von vor einer Woche zu gehen mit Edomi Version 1.50

    Also das zurückspielen des alten Backups in verbidndung mit dem MQTT Publish Server LBS hat die Reaktionsgeschwindigkeit von Edomi wieder hergestellt.


    Bislang hatte ich nur den Subscribe Server LBS im Einsatz und den Publish nur aktiv aber ungenutzt eingebaut.

    Das muss sich jetzt mal ändern!!!

    Jetzt nochmal Basics zu dem MQTT Publisher LBS.

    In der Hilfe zum MQTT Publisher LBS steht:

    The communication objects will be published in the following structure:

    edomi/status/typ/[KO-name]
    edomi/status/typ/[KO-ID]
    E8=both

    Sagen wir ich habe eine KNX GA 0/1/1 in Edomi

    Jetzt aboniere ich folgendes Topic ( z.B mit mqttfx) :
    edomi/status/knx/0-1-1

    Müsste dann nicht bei änderung dieser GA eine neue Message/payload generiert und gepublished werden?

    Bei mir klappt das nicht!!
    Wenn ich mit mqttfx dieses Topic aboniere bekomme ich einen Payload.
    Dieser ändert sich aber nie ..egal was ich innerhalb Edomi oder im Bus mit dieser GA anstelle.

    Hilfe bitte









    Nanosonde

    Frag mich später nochmal. Grundsätzlich würde ich wohl einen Zentralen Baustein nehmen.
    Das ich jetzt so massive Probleme mit dem Edomi/MQTT Kombi hatte/habe ist das deaktivieren einer Logikseite sehr händisch
    Zuletzt geändert von trollmar; 26.07.2017, 10:14.

    Einen Kommentar schreiben:


  • Nanosonde
    antwortet
    Hallo!

    Mal eine Frage in die Runde: wie nutzt Ihr die MQTT CLIENT LBS denn so im Detail?
    Nutzt Ihr nur eine Instanz und abonniert dann alle möglichen Topics, die dann später durch einen anderen LBS zerpflückt werden?
    Oder nutzt Ihr pro Topic jeweils eine eigene Instanz?

    Ich hadere aktuell noch damit, wie ich die vielen Topic am besten verarbeiten soll. Zum Beispiel möchte ich einige MQTT Clients nutzen, die dieser Spez. folgen: https://github.com/mqtt-smarthome/mqtt-smarthome

    Zu nennen wäre da hm2mqtt.js, bravia2mqtt, etc.

    Ich überlege, ob es evtl. sinnvoll ist, jeweils eigene LBS zu bauen, die dann ein Topic/Payload wieder zu einem HM-Gerät, etc. abbilden und auch dann die entsprechenden Ein-/Ausgänge zur Verfügung stellen sollen. Das würde aber zum Beispiel bei Homematic ziemlich viele neue LBS bedeuten.

    Einen Kommentar schreiben:


  • trollmar
    antwortet
    Hi Jonofe,

    ich habe ja nicht das gleiche Problem wie der Kollege hier.

    Bei mir

    Code:
    Database changed
    
    mysql> SHOW PROCEDURE STATUS; show triggers;
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    | Db        | Name         | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    | edomiLive | mqtt_publish | PROCEDURE | root@localhost | 2017-07-25 22:13:54 | 2017-07-25 22:13:54 | DEFINER       |         | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    +-----------+--------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
    
    1 row in set (0.00 sec)
    
    
    
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    | Trigger             | Event  | Table | Statement                                                 | Timing | Created | sql_mode | Definer        | character_set_client | collation_connection | Database Collation |
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    | mqtt_insert_trigger | INSERT | RAMko | CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value) | AFTER  | NULL    |          | root@localhost | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    | mqtt_update_trigger | UPDATE | RAMko | CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value) | AFTER  | NULL    |          | root@localhost | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
    
    +---------------------+--------+-------+-----------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
    
    2 rows in set (0.01 sec)
    ... ist ja alles "vorhanden".

    Das löschen des LBS und folgendes



    Code:
    mysql
    USE edomiLive;
    DROP TRIGGER IF EXISTS mqtt_insert_trigger;
    DROP TRIGGER IF EXISTS mqtt_update_trigger;
    CREATE TRIGGER mqtt_insert_trigger AFTER INSERT ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    CREATE TRIGGER mqtt_update_trigger AFTER UPDATE ON RAMko FOR EACH ROW CALL mqtt_publish(NEW.gatyp, NEW.ga, NEW.name, NEW.value);
    SHOW TRIGGERS;
    ..hat leider nichts gebracht.

    Zitat von jonofe Beitrag anzeigen
    Ja, das würde ich machen. und mal ein DROP auf trigger und procedure direkt aus mysql heraus. Dann siehst du, ob man die löschen kann.
    Wie mache ich den einen "DROP" auf die procedure?

    Ich denke darüber nach mal auf ein Backup von vor einer Woche zu gehen mit Edomi Version 1.50


    Einen Kommentar schreiben:

Lädt...
X