+ Antworten
Seite 1 von 8 1 2 3 ... LetzteLetzte
Ergebnis 1 bis 10 von 78
  1. #1
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,033

    Standard [Library] Alle ModBus Zähler von B+G E-Tech

    Da ich endlich meine Zähler auf einem RS485 Bus anschalten wollte, habe ich heute mal schnell etwas zusammenkopiert

    Ein kleines Modul für alle(*) Zähler vom Hersteller B+G E-Tech.

    Hier zu finden:
    GitHub - Nall-chan/IPSBGETech: IPS Libraray für Energie-Zähler der Firma B+G E-Tech
    Code:
    https://github.com/Nall-chan/IPSBGETech
    Eigentlich machen die Module nichts anderes, als die in IPS vorhandenen ModBus-Instanzen.
    Der Unterschied ist nur, dass nach dem auslesen eines Zählers 333ms gewartet wird.
    Somit kommen sich diese 'trägen' Geräte auf einem physikalischen Bus nicht mehr in die Quere.

    Die enthaltenden Instanzen benötigen jeweils eine Instanz vom Typ 'ModBus Gateway' als übergeordnete Instanz. Dort ist die Geräte ID einzutragen.

    Es sind nicht alle(*) Werte im Modul vorhanden, wer möchte kann die Module gerne forken und um weitere Werte erweitern.

    Der Code wurde zur Version 1.X komplett vereinheitlicht und vereinfacht. Somit sind jetzt nur noch ein Array mit allen sowie die Doku und Übersetzung für neue Zähler bzw weitere Werte anzupassen.

    Achtung: In Version 2 wurden die Idents der Instanzen DRS210C und SDM630 verändert !
    Somit werden nach einem Update hier teilweise neu Variablen angelegt.
    Alle neuen Variablen sind jetzt auch komplett in Deutsch übersetzt

    Version 2.0:
    DRS 458 ergänzt
    SDM 72D ergänzt
    SDM 120C ergänzt
    SDM 220 ergänzt
    SDM 230 ergänzt
    SDM 630 fehlende Werte ergänzt und kleiner Bugfixes

    Version 2.3:
    SDM 530 ergänzt

    (*) Sofern Geräte fehlen, einfach melden. Ich binde diese ein, sofern es eine Doku über die ModBus-Register gibt. Die Import/Export Werte sind aktuell nicht in der Library vorhanden.
    Da ich nicht alle Zähler habe, konnte ich nicht jeden Messwert testen und musste mich auf die Hersteller-Doku stützen.
    Bei Fehlern bitte melden

    Michael
    Geändert von Nall-chan (07.08.18 um 19:53 Uhr) Grund: Update 2.3
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  2. #2
    Registriert seit
    Mar 2014
    Ort
    Mücke (Hessen)
    Beiträge
    947

    Hallo Michale,

    ich würde gerne dein Modul an meine Zähler anwenden bzw. Anpassen. Leider habe ich noch nie mit Module gearbeitet
    Meine Zähler sind von der Fa.Schneider "iEM3155"

    Wie mache ich das mit den Modbus Adressen und Einheiten in der module.php?

    Name:  iem.PNG
Hits: 920
Größe:  10.2 KB

    Verbrauch abfrage ist beim dem Zähler etwas uncool

    1 x Adresse:3205
    Einheit: SmallInt(16bit-Signed)
    1 x Adresse:3206
    Einheit: Integer (32bit-Signed)
    Mit den Beiden Werten im Script weiter Arbeiten:
    PHP-Code:
    <?
    $adresse3205 
    GetValue(49039);
    $adresse3206 GetValue(56641);
    $bit 65536//2hoch16

    $verbrauch 28753//Float Variable

    $rechnung = (($adresse3205*$bit)+$adresse3206)/1000;

    SetValue($verbrauch$rechnung);

    ?>
    Würde mich freuen wenn du mir etwas Helfen könntest.

    Gruß
    IPS v5.1 Unlimited auf Ubuntu Server | IPSView | EnOceanPi | Z-Wave (Razberry) | Sonos | Fritzbox 7390 | 1-Wire | DMX | Dali | Pokeys57E | Siemens Logo 8 | Siemens S7-1200 | Wago SPS | KNX | Onkyo AVR | ModBus | HomeMatic@piVCCU | ESP8266 | MQTT | Ubiquiti | und noch viel mehr geplant

  3. #3
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,033

    Funktionscode und Adresse kannst du hier sehen:
    IPSBGETech/module.php at 4f5f0dde7aff2f05c9d607dbb2dad4a2060ababf · Nall-chan/IPSBGETech · GitHub

    Quantity gibt die Anzahl an 16bit Werten an welche du lesen willst.
    Also bei dir einmal 1 und einmal 2.
    Die Umrechnung musst du dann zu Fuß machen, ich habe dafür unpack genutzt.
    Eventuell kannst du auch gleich einen 64bit Wert lesen? Oder mag das dein Zähler nicht?

    Zum testen kann du wie folgt vorgehen:
    Lade mein Modul in IPS.
    Kopiere den Ordner DRS210C und gibt ihm einen neuen Namen.
    Benenne die Klasse in module.php genauso.
    Und dann musst du noch die Module.json anpassen.
    Ebenfalls den Klassennamen und eine eigene GUID .
    Dann IPS neustarten.

    Anschließend kannst du eine deiner Instanzen erzeugen und in Echtzeit den Code in einem beliebigen Editor anpassen.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  4. #4
    Registriert seit
    Mar 2014
    Ort
    Mücke (Hessen)
    Beiträge
    947

    Hallo Michael,

    danke für die Hilfe
    Leider bekomme ich es nicht hin
    Sitze schon den ganzen Abend dran und nicht mal ein kleiner Erfolg.

    Namen und GUID's habe ich angepasst.

    Für Spannung habe ich die Adresse 3026
    in module.php habe ich die Adresse auch angepasst:

    PHP-Code:
     $Volt $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}""Function" => 3"Address" => 0xBD2"Quantity" => 2"Data" => "")));
            if (
    $Volt === false)
            {
                
    $this->unlock($IO);
                return 
    false;
            }
            
    $Volt unpack("G"substr($Volt2))[1];
            
    $this->SendDebug('Volt'$Volt0);
            
    SetValue($this->GetIDForIdent("Volt"), $Volt); 
    Im Symcon kommt aber immer eine Fehlermeldung:
    PHP-Code:
    20.10.2017 20:32:13 TimerPool iEM315 (UpdateTimer): <br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>58</b><br />
    <
    br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>69</b><br />
    <
    br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>80</b><br />
    <
    br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>91</b><br />
    <
    br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>103</b><br />
    <
    br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>115</b><br />
    <
    br />
    <
    b>Warning</b>:  unpack(): Invalid format type G in <b>/var/lib/symcon/modules/IPSBGETech/iEM3155/module.php</bon line <b>126</b><br /> 
    Was ist format type G ?

    Gruß
    IPS v5.1 Unlimited auf Ubuntu Server | IPSView | EnOceanPi | Z-Wave (Razberry) | Sonos | Fritzbox 7390 | 1-Wire | DMX | Dali | Pokeys57E | Siemens Logo 8 | Siemens S7-1200 | Wago SPS | KNX | Onkyo AVR | ModBus | HomeMatic@piVCCU | ESP8266 | MQTT | Ubiquiti | und noch viel mehr geplant

  5. #5
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,033

    Du kannst die Adresse auch als Int angeben, ich habe nur Hex genommen, weil die Doku so war von meinem Zähler

    unpack('G') ist für Float.
    Die Formate sind hier erklärt, sonst hilft ausprobieren.
    PHP: pack - Manual
    Allerdings sehe ich gerade, in der deutschen Doku fehlt 'G'


    Laut Doku für deinen Zähler hast du einen Int64.
    Das sollte IPS direkt können
    Adresse: 3204
    Function: 3
    Typ Real64 oder Int64 (ausprobieren)

    Wenn du es mit dem Modul versuchen willst, dass sollte es so funktionieren:

    Versuch mal:
    PHP-Code:
     $Value $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}""Function" => 3"Address" => 3204"Quantity" => 4"Data" => ""))); 


    $Value1 unpack("G"substr($Value 2))[1]; 
    $this->SendDebug('Test unpack G'$Value1 0); 

    $Value2 unpack("g"substr($Value 2))[1]; 
    $this->SendDebug('Test unpack g'$Value2 0); 

    Du solltest dann im Debug der Instanz sehen welcher Wert korrekt ist.

    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  6. #6
    Registriert seit
    Mar 2014
    Ort
    Mücke (Hessen)
    Beiträge
    947

    Hallo Michael,

    bei meinem Zähler ist nur der Verbrauch Int64. Die Werte für Spannung, Strom usw. ist Float32.

    Danke für den Beispiel. Geht aber trotzdem nicht.
    Wenn ich anstatt G ein F nehme, bekomme ich komische werte. Aber ich bekomme welche.
    Also ist die Verbindung da.

    Spielt es eine Rolle wie der Zähler angebunden ist?

    Gruß
    IPS v5.1 Unlimited auf Ubuntu Server | IPSView | EnOceanPi | Z-Wave (Razberry) | Sonos | Fritzbox 7390 | 1-Wire | DMX | Dali | Pokeys57E | Siemens Logo 8 | Siemens S7-1200 | Wago SPS | KNX | Onkyo AVR | ModBus | HomeMatic@piVCCU | ESP8266 | MQTT | Ubiquiti | und noch viel mehr geplant

  7. #7
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,033

    Nö. Das ist egal.

    Mich wundert dass er auf 2305 überhaupt reagiert. Weil eigentlich ist es ja 2304 und dann 64 Bit.
    Und das funktioniert mit der original ModBus-Instanz nicht?

    Ansonsten lass dir mal das Ergebnis der Abfrage (von SendDataToParent) mit $this->SendDebug('test', $Value,1); ausgeben.

    Die ersten beiden Hex Werte sind egal.
    Der Rest ist die Antwort welche den Wert darstellen soll.
    Dann probiere ich es mal umzurechnen
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  8. #8
    Registriert seit
    Mar 2014
    Ort
    Mücke (Hessen)
    Beiträge
    947

    Ich glaube wir Reden (Schreiben) an einander vorbei

    Ich bekomme es nicht hin die "Normale" werte wie Spannung, Strom usw über ein Modul ins IPS zu bekommen.
    Geschweige von Verbrauch.

    Dein Beispiel ist anscheinend für Int64?

    Auf Haupt IPS läuft ja alles. Über Modul aber nicht
    Schnittstelle an Haupt IPS ist geschlossen. Damit ich am Test IPS Spielen kann.

    Egal was ich im module.php mache, kommt die Fehlermeldung und in IPS im Debug Werte 0

    Mache ich grundsätzlich was Falsch?

    Gruß
    IPS v5.1 Unlimited auf Ubuntu Server | IPSView | EnOceanPi | Z-Wave (Razberry) | Sonos | Fritzbox 7390 | 1-Wire | DMX | Dali | Pokeys57E | Siemens Logo 8 | Siemens S7-1200 | Wago SPS | KNX | Onkyo AVR | ModBus | HomeMatic@piVCCU | ESP8266 | MQTT | Ubiquiti | und noch viel mehr geplant

  9. #9
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,033

    Sorry mein Fehler, hatte dein Problem nur an den Int64 wert vom Verbrauch festgemacht.

    Verstehe jetzt auch warum 'g' nicht funktioniert bei dir.
    Ist leider eine Erweiterung von PHP welche es nicht in IPS gibt.
    Also bleibt nur 'f' oder ganz anders rechnen.

    Am Beispiel Voltage L1 to N ist Adresse 3028, richtig ?
    Was bekommst du hier den im Debug angezeigt ?

    PHP-Code:
     $VoltL1 $this->SendDataToParent(json_encode(Array("DataID" => "{E310B701-4AE7-458E-B618-EC13A1A6F6A8}""Function" => 3"Address" => 3028"Quantity" => 2"Data" => ""))); 
            if (
    $VoltL1 === false
            { 
                
    $this->unlock($IO); 
                return 
    false
            } 
            
    $VoltL1 substr($VoltL12); 
            
    $this->SendDebug('VoltL1'$VoltL11); //Hex ausgabe

    //        SetValue($this->GetIDForIdent("Volt"), $Volt); 
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  10. #10
    Registriert seit
    Mar 2014
    Ort
    Mücke (Hessen)
    Beiträge
    947

    Hallo,

    es kommt schon mal was an

    Code:
    64 CA 43 65
    Ändert sich ständig.

    Gruß
    IPS v5.1 Unlimited auf Ubuntu Server | IPSView | EnOceanPi | Z-Wave (Razberry) | Sonos | Fritzbox 7390 | 1-Wire | DMX | Dali | Pokeys57E | Siemens Logo 8 | Siemens S7-1200 | Wago SPS | KNX | Onkyo AVR | ModBus | HomeMatic@piVCCU | ESP8266 | MQTT | Ubiquiti | und noch viel mehr geplant

Ähnliche Themen

  1. Resize Modul mit Offset für x- und y-Achse möglich?
    Von PC Oldie im Forum IPSStudio & IPSView
    Antworten: 4
    Letzter Beitrag: 16.05.17, 21:10
  2. Simples Auswerteskript für Zähler
    Von wango im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 50
    Letzter Beitrag: 10.02.17, 10:29
  3. Antworten: 2
    Letzter Beitrag: 09.02.16, 10:25
  4. SDM630-Modbus neue Version Probleme beim Auslesen
    Von Lukky im Forum Haustechnik
    Antworten: 4
    Letzter Beitrag: 22.04.15, 05:32
  5. Pokeys/Modbus in Shutter Control Modul einbinden
    Von baba im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 9
    Letzter Beitrag: 21.04.15, 22:51

Stichworte