jp112sdl / HB-UNI-Sen-CURRENT

4 stars 1 forks source link

INA219 (work in progress) #2

Open elmarfaber opened 3 years ago

elmarfaber commented 3 years ago

Hallo,

ich habe gerade ein Projekt wo ich die Anbindung des o.g. Sensors verwenden könnte. Ist denn die Einbindung des INA219 noch geplant?

Viele Grüße

Elmar

jp112sdl commented 3 years ago

Hallo Elmar,

zeitlich ist meinerseits nicht absehbar, wann und ob ich das noch einbaue.

Evtl. bekommst du es selbst hin? Beim HB-ES-PMSw1-USB habe ich den INA219 eingebaut: https://github.com/jp112sdl/HB-ES-PMSw1-USB/blob/master/HB-ES-PMSw1-USB.ino

elmarfaber commented 3 years ago

Hallo Jérôme,

ich bin zwar nicht so ganz unerfahren im programmieren aber ich glaube nicht, dass ich das hinbekomme ohne mehr über die Grundstruktur von AskSin++ zu wissen - ist schon sehr komplex. Aber ich versuche mich mal daran...

jp112sdl commented 3 years ago

ohne mehr über die Grundstruktur von AskSin++ zu wissen

Da musst du auch gar nicht ran.

Ich hab das mal grob in den Sketch gepackt. https://github.com/jp112sdl/HB-UNI-Sen-CURRENT/blob/dev/ina219/HB-UNI-Sen-CURRENT.ino

Die Änderungen sind überschaubar: https://github.com/jp112sdl/HB-UNI-Sen-CURRENT/compare/dev/ina219

Überall dort, wo was mit dem ADS1115 gemacht wird, musst dafür der INA219 werkeln.

NUM_CHANNELS solltest du noch auf 1 setzen https://github.com/jp112sdl/HB-UNI-Sen-CURRENT/blob/2ed1deb66944ee0305fe46d08b8e331339dcb3b2/HB-UNI-Sen-CURRENT.ino#L41

elmarfaber commented 3 years ago

Okay, das ist wirklich nicht wild, hab den Sketch nun angepasst und muss jetzt nur noch die Hardware zusammenbauen und es testen. Habe den INA226 mal mit dazu gepackt und die xml Datei um den Parameter erweitert: ...


<paramset type="MASTER" id="HB-UNI-Sen-CURRENT_ch_master">
        <parameter id="SENSOR_TYPE">
          <logical type="option">
           <option id="SCT-013-015" />
           <option id="SCT-013-020" />
           <option id="SCT-013-030" default="true" />
           <option id="SCT-013-050" />
           <option id="SCT-013-100" />
           <option id="INA219" />
           <option id="INA226" />
           <option id="ACS712 or other" />
          </logical>
          <physical type="integer" interface="config" list="1" index="3" size="1"/>
        </parameter> 

```...
Ich hoffe, ich habe alles richtig gemacht. Ich melde mich, wenn ich es getestet habe... 
Vielen Dank für deine Hilfe!!!!      
jp112sdl commented 3 years ago

die xml Datei um den Parameter erweitert

Hi,

das reicht nicht. Die WebUI Config Page hat die Liste auch noch hier: https://github.com/jp112sdl/JP-HB-Devices-addon/blob/master/src/addon/www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl#L115-L123

elmarfaber commented 3 years ago

Hallo,

also kompilieren und aufspielen ist kein Problem, aber die Auswahlliste auf dem RasberryMatic verändert sich nicht. ich sehe schon den Auswahlpunkt INA219 nicht... Jetzt bräuchte ich doch noch ein wenig Hilfe... Die xml-Datei habe ich in den Ordner /usr/local/addons/jp-hb-devices-addon/customized_firmware kopiert

jp112sdl commented 3 years ago

Da ist ja ein Fehler in meiner Aufzählung 😎 Hab ich noch gar nicht mitbekommen. Es muss hier natürlich

      set options(5) "INA219"      
      set options(6) "ACS712 or other"

heißen

elmarfaber commented 3 years ago

Das hatte ich schon korrigiert, aber komischerweise fehlt der INA219 Eintrag und der letzte ist der "ACS712 or other" Ich verstehe nicht warum der letzte Eintrag stimmt und der dazwischen fehlt


           <option id="SCT-013-100" />
           <option id="INA219" />

```Es fehlen soger diese beiden
jp112sdl commented 3 years ago

Wir reden hier aber von 2 verschiedenen Dingen Das ist die XML

  <option id="SCT-013-100" />
  <option id="INA219" />

und das hier die HB-UNI-Sen-CURRENT_ch_master.tcl

  set options(5) "INA219"      
  set options(6) "ACS712 or other"

Wenn du was an den Dateien änderst, musst du anschließend auch die ReGa und den RFD neustarten

elmarfaber commented 3 years ago

Das steht in der .tcl Datei:

array_clear options set options(0) "SCT-013-015" set options(1) "SCT-013-020" set options(2) "SCT-013-030" set options(3) "SCT-013-050" set options(4) "SCT-013-100" set options(5) "INA219" set options(6) "ACS712 or other" append HTML_PARAMS(separate_1) "<td>\${stringTableHbGenericDistSensorType} </td>"

und das in der XML: `

`

Alles neu gestartet auch gelöscht und neu angelernt

Das sehe ich, wenn ich die Einstellungen verändern möchte: grafik

jp112sdl commented 3 years ago

Bei mir ist alles da

Bildschirmfoto 2021-05-21 um 16 15 35
elmarfaber commented 3 years ago

Ich habe die Addons 5.2 noch einmal hochgeladen Neustart und das device neu angelernt, genau das gleiche... Kann das Problem im Sketch liegen?

jp112sdl commented 3 years ago

Ich habe die Addons 5.2 noch einmal hochgeladen Neustart und das device neu angelernt, genau das gleiche...

Im Addon ist der Fehler doch noch drin... Da ich ihn eben erst bemerkt habe, kommt der Fix erst mit der nächsten Version 5.3

Kann das Problem im Sketch liegen?

Nein, das liegt einzig und allein an der HB-UNI-Sen-CURRENT_ch_master.tcl

jp112sdl commented 3 years ago

Hier kannst du dir eine Vorab-Version der 5.3 herunterladen: https://www.dropbox.com/s/wzzc2dvutt2d2ec/jp-hb-devices-addon-5.3-beta.tgz?dl=0

elmarfaber commented 3 years ago

So es funktioniert! Ich habe nur einen Faktor 10 zuviel im Ergebnis, da muss ich die Initialisierung noch einmal prüfen

elmarfaber commented 3 years ago

Ich habe noch einmal versucht ein Element zur Liste hinzuzufügen:

  1. Die Datei hb-uni-sen-current.xml in das Verzeichnis "/usr/local/addons/jp-hb-devices-addon/customized_firmware" kopiert und INA226 zur Liste hinzugefügt
  2. Die Datei HB-UNI-Sen-CURRENT_ch_master.tcl im Verzeichnis /usr/local/addons/jp-hb-devices-addon/www/config/easymodes angepasst (INA226 zur Liste hinzugefügt)
  3. RaspberryMatic Neustart
  4. Den Sensor neu gestartet

Liste ist unverändert - Was mache ich denn falsch???

jp112sdl commented 3 years ago

Gute Frage... häng die TCL mal hier an

elmarfaber commented 3 years ago
#!/bin/tclsh

source [file join $env(DOCUMENT_ROOT) config/easymodes/em_common.tcl]
source [file join $env(DOCUMENT_ROOT) config/easymodes/EnterFreeValue.tcl]

proc getMinValue {ps_descr param} {
  upvar ps_descr descr
  array_clear param_descr
  array set param_descr $descr($param)

  set min $param_descr(MIN)

  if {($param == "COND_TX_THRESHOLD_HI")  || ($param == "COND_TX_THRESHOLD_LO") } {
    set min [format {%.2f} $min]
  }  

  return $min
}

proc getMaxValue {ps_descr param} {
  upvar ps_descr descr
  array_clear param_descr
  array set param_descr $descr($param)
  set max $param_descr(MAX)

  if {($param == "COND_TX_THRESHOLD_HI")  || ($param == "COND_TX_THRESHOLD_LO") } {
    set max [format {%.2f} $max]
  }  

  return $max
}

proc getMinMaxValueDescr {ps_descr param} {
    upvar ps_descr descr 
    array_clear param_descr
    array set param_descr $descr($param)
    set min $param_descr(MIN)
    set max $param_descr(MAX)

  if {($param == "COND_TX_THRESHOLD_HI")  || ($param == "COND_TX_THRESHOLD_LO") } {
    set min [format {%.2f} $min]
    set max [format {%.2f} $max]
  }

  return "($min - $max)" 
}

proc getUnit {ps_descr param} {
  upvar ps_descr descr 
  array_clear param_descr
  array set param_descr $descr($param)
  set unit $param_descr(UNIT)
  return "$unit"
}

proc setSelectedSensorType {selSensorType elmID} {
  puts "<script type=\"text/javasscript\">"
    puts "var options = \$\$('select#$elmID option');"

   puts "options\[$selSensorType\].selected = true;"
  puts "</script>"               
}

proc displayFields {id mode} {
  # mode can be 'show' or 'hide' 
  if {$mode != "hide"} {
    set mode "show"
  }
  puts "<script type=\"text/javasscript\">"
    #puts "\$\$(\".j_custom\").invoke('$mode');"
    puts "\$\$(\"$id\").invoke('$mode');"
  puts "</script>"
}

proc set_htmlParams {iface address pps pps_descr special_input_id peer_type} {
  puts "<script type=\"text/javascript\">load_JSFunc('/config/easymodes/js/HBCurrentSensor.js');</script>"

  global iface_url

  upvar PROFILES_MAP  PROFILES_MAP
  upvar HTML_PARAMS   HTML_PARAMS
  upvar PROFILE_PNAME PROFILE_PNAME
  upvar $pps          ps
  upvar $pps_descr  ps_descr

  set url $iface_url($iface)
  set devType "HB_GENERIC"

  set comment {
    foreach val [array names ps] {
      puts "$val: $ps($val)<br/>"
    }
    foreach val [array names ps_descr] {
      puts "$val: $ps_descr($val)<br/>"
    }

    puts "<br/><br/>"
  }

  set chn [lindex [split $special_input_id _] 1]                                                                                              

  append HTML_PARAMS(separate_1) "<table class=\"ProfileTbl\">"

      append HTML_PARAMS(separate_1) "<tr><td colspan='2'>"
        append HTML_PARAMS(separate_1) "<div><b>\${stringTableConditionCurrentTitle}</b></div>"
      append HTML_PARAMS(separate_1) "</td></tr>"

    set prn 1

    set param "SENSOR_TYPE"                                                            
    append HTML_PARAMS(separate_1) "<tr>"
      array_clear options
      set options(0) "SCT-013-015"
      set options(1) "SCT-013-020"
      set options(2) "SCT-013-030"
      set options(3) "SCT-013-050"
      set options(4) "SCT-013-100"
      set options(5) "INA219"
      set options(6) "INA226"
      set options(7) "ACS712 or other"
      append HTML_PARAMS(separate_1) "<td>\${stringTableHbGenericDistSensorType} </td>"
      set cmb $chn                                                                                                                                
      append cmb $prn  
      append HTML_PARAMS(separate_1) "<td>[get_ComboBox options $param separate_CHANNEL_$chn\_$prn ps $param]</td>"
    append HTML_PARAMS(separate_1) "</tr>"

    incr prn
    set param "SAMPLE_TIME"
    set min [getMinValue ps_descr $param]
    set max [getMaxValue ps_descr $param]
    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\">"
      append HTML_PARAMS(separate_1) "<td class=\"stringtable_value\">\${stringTableHBSampleTime}</td>"
      append HTML_PARAMS(separate_1) "<td> <input type=\"text\" id=\"separate_CHANNEL_$chn\_$prn\" name=\"$param\" value=\"$ps($param)\" onblur=\"ProofAndSetValue('separate_CHANNEL_$chn\_$prn','separate_CHANNEL_$chn\_$prn', '$min', '$max', 1);\"> </td>"
      append HTML_PARAMS(separate_1) "<td>[getUnit ps_descr $param] [getMinMaxValueDescr ps_descr $param] </td>"
    append HTML_PARAMS(separate_1) "</tr>"

    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\"><td colspan=\"100%\"><hr/></td></tr>"    

    incr prn
    set param "COND_TX_THRESHOLD_HI"
    set min [getMinValue ps_descr $param]
    set max [getMaxValue ps_descr $param]
    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\">"
      append HTML_PARAMS(separate_1) "<td class=\"stringtable_value\">\${stringTableCondThresholdHi}</td>"
      append HTML_PARAMS(separate_1) "<td> <input type=\"text\" id=\"separate_CHANNEL_$chn\_$prn\" name=\"$param\" value=\"[format {%.2f} $ps($param)]\" onblur=\"ProofAndSetValue('separate_CHANNEL_$chn\_$prn','separate_CHANNEL_$chn\_$prn', '$min', '$max', 1);\"> </td>"
      append HTML_PARAMS(separate_1) "<td>[getUnit ps_descr $param] [getMinMaxValueDescr ps_descr $param] </td>"
    append HTML_PARAMS(separate_1) "</tr>"

    incr prn
    set param "COND_TX_DECISION_ABOVE"
    set min [getMinValue ps_descr $param]
    set max [getMaxValue ps_descr $param]
    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\">"
      append HTML_PARAMS(separate_1) "<td class=\"stringtable_value\">\${stringTableCondTxDecisionAbove}</td>"
      append HTML_PARAMS(separate_1) "<td> <input type=\"text\" id=\"separate_CHANNEL_$chn\_$prn\" name=\"$param\" value=\"$ps($param)\" onblur=\"ProofAndSetValue('separate_CHANNEL_$chn\_$prn','separate_CHANNEL_$chn\_$prn', '$min', '$max', 1);\"> </td>"
      append HTML_PARAMS(separate_1) "<td>[getUnit ps_descr $param] [getMinMaxValueDescr ps_descr $param] </td>"
    append HTML_PARAMS(separate_1) "</tr>"

    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\"><td colspan=\"100%\"><hr/></td></tr>"    

    incr prn
    set param "COND_TX_THRESHOLD_LO"
    set min [getMinValue ps_descr $param]
    set max [getMaxValue ps_descr $param]
    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\">"
      append HTML_PARAMS(separate_1) "<td class=\"stringtable_value\">\${stringTableCondThresholdLo}</td>"
      append HTML_PARAMS(separate_1) "<td> <input type=\"text\" id=\"separate_CHANNEL_$chn\_$prn\" name=\"$param\" value=\"[format {%.2f} $ps($param)]\" onblur=\"ProofAndSetValue('separate_CHANNEL_$chn\_$prn','separate_CHANNEL_$chn\_$prn', '$min', '$max', 1);\"> </td>"
      append HTML_PARAMS(separate_1) "<td>[getUnit ps_descr $param] [getMinMaxValueDescr ps_descr $param] </td>"
    append HTML_PARAMS(separate_1) "</tr>"

    incr prn
    set param "COND_TX_DECISION_BELOW"
    set min [getMinValue ps_descr $param]
    set max [getMaxValue ps_descr $param]
    append HTML_PARAMS(separate_1) "<tr class=\"j_custom j_currentsensor\">"
      append HTML_PARAMS(separate_1) "<td class=\"stringtable_value\">\${stringTableCondTxDecisionBelow}</td>"
      append HTML_PARAMS(separate_1) "<td> <input type=\"text\" id=\"separate_CHANNEL_$chn\_$prn\" name=\"$param\" value=\"$ps($param)\" onblur=\"ProofAndSetValue('separate_CHANNEL_$chn\_$prn','separate_CHANNEL_$chn\_$prn', '$min', '$max', 1);\"> </td>"
      append HTML_PARAMS(separate_1) "<td>[getUnit ps_descr $param] [getMinMaxValueDescr ps_descr $param] </td>"
    append HTML_PARAMS(separate_1) "</tr>"

   append HTML_PARAMS(separate_1) "</table>"

}
constructor
jp112sdl commented 3 years ago

Vielleicht ein Cache Problem des Browsers? Habe deinen Code 1:1 verwendet:

Bildschirmfoto 2021-05-21 um 19 07 29
elmarfaber commented 3 years ago

Ich verstehe es nicht, anderer Browser, Cache gelöscht, anderer Rechner immer das gleiche... Unter RaspberryMatic Einstellungen - DevConfig - DeviceList stimmt die Liste, es muss also am RaspberryMatic liegen... Als ich das Addon installiert habe hat es ja auch sofort funktioniert. Bin jetzt ratlos...

jp112sdl commented 3 years ago

Na hattest du denn den Raspi nach deiner Änderung neugestartet? Der ReGaHss hält die TCL im Cache... Alternativ kannst du über "Skript testen" system.CacheMode(0); den Cachemode mal vorübergehend deaktivieren. Unbedingt aber später wieder mit system.CacheMode(1); aktivieren. Und nicht wundern, dabei kann der ReGaHss Prozess crashen.

elmarfaber commented 3 years ago

Es klappt nicht, hab jetzt sogar den Stecker gezogen, immer noch das gleiche ich werde noch verrückt... Warum klappt die Aktuallisierung über das Addon installieren? Ich denke ich versuche es Morgen weiter...

jp112sdl commented 3 years ago

Nur um ein paar Basics auszuschließen: Wie editierst du die Datei? Ist deine Änderung auch wirklich drin? Hast du das Dateisystem vorher beschreibbar gemacht?

elmarfaber commented 3 years ago

Ich verwende WinSCP mit Admin Rechten - der Editor ist Nodepad++. Meine CCU Iist ein Raspberry mit RaspberryMatic neuste Version. Wenn ich die editierten Dateien downloade, sind die Änderungen darin enthalten.

jp112sdl commented 3 years ago

Kommt mir alles sehr seltsam vor.

Ohne vorher das Dateisystem beschreibbar zu machen (mount -o remount,rw /) kann es nicht funktionieren.

Vielleicht editierst du die ganze Zeit auch die falsche Datei - die im Addonverzeichnis, denn das liegt im user-space und ist immer r/w gemountet.

Falsch: /usr/local/addons/jp-hb-devices-addon/www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl Richtig: /www/config/easymodes/HB-UNI-Sen-CURRENT_ch_master.tcl

elmarfaber commented 3 years ago

Oh was ein... ja das falsche Verzeichnis war es. Jetzt klappt es Vielen Dank für deine Hilfe!!! Weitere Fragen, wie z.B. Erhöhen der Stellen uin der Anzeige wie 0,0025 wären hier ja fehl am Platz, die stelle ich besser seperat im Forum?

jp112sdl commented 3 years ago

Du meinst die Anzeige in "Status und Bedienung" -> "Geräte" ?

elmarfaber commented 3 years ago

Genau, die Anzeige ist ja dreistellig 0.18A ich bräuchte ein oder zwei Stellen mehr Habe auch immer noch das Problem, dass der Messwert um den Faktor 10 zu hoch ist

jp112sdl commented 3 years ago

ich bräuchte ein oder zwei Stellen mehr

Das wird sehr aufwendig.

Vielleicht solltest du nicht mit A sondern mit mA arbeiten. Dann sparst du dir diese ganze Dezimalgeschichte.

dass der Messwert um den Faktor 10 zu hoch ist

Warum teilst du ihn nicht einfach / 10 ? https://github.com/jp112sdl/HB-UNI-Sen-CURRENT/blob/2ed1deb66944ee0305fe46d08b8e331339dcb3b2/HB-UNI-Sen-CURRENT.ino#L363

ina219.getCurrent_mA() / 10

elmarfaber commented 3 years ago

Geteilt hab ich ihn aber dann zeigt er mir anstatt 0.18 0.01A an oder gerundet 0.02 besser wäre eben 18mA - dann wäre meine Frage wie ich anstatt A mA anzeigen kann. Auch verstehe ich nicht, warum der Wert um den Faktor 10 zu hoch ist, da ja die Library mA zurück liefert

jp112sdl commented 3 years ago

besser wäre eben 18mA - dann wäre meine Frage wie ich anstatt A mA anzeigen kann.

mA werden z.B. beim https://github.com/jp112sdl/HB-ES-PMSw1-USB angezeigt. Und hier die XML dazu: https://github.com/jp112sdl/JP-HB-Devices-addon/blob/master/src/addon/firmware/rftypes/hb-es-pmsw1-usb.xml#L109-L116

Auch verstehe ich nicht, warum der Wert um den Faktor 10 zu hoch ist, da ja die Library mA zurück liefert

Vielleicht falscher current divider?

https://github.com/jp112sdl/HB-UNI-Sen-CURRENT/blob/2ed1deb66944ee0305fe46d08b8e331339dcb3b2/HB-UNI-Sen-CURRENT.ino#L382

Hab mich im Detail nicht weiter mit dem INA219 befasst bisher

elmarfaber commented 3 years ago

Der gemessene Wert ist 18, was stimmt, ich finde nur nicht wo daraus 0.18 werden. Ich würde eben gerne einen Wert von 18 angezeigt bekommen, aber ich werde mich erst einmal mit den Links von dir beschäftigen - ist schwierig als Einsteiger zu finden, wo was passiert :-)

elmarfaber commented 3 years ago

So es hat alles funktioniert, ich erhalte nun einen Wert in mA. Soll ich den Sketch ablegen oder die Änderungen irgendwo dokumentieren? Vielen Dank für deine Ausdauer und Hilfe!!!

jp112sdl commented 3 years ago

Hmm, das mit den mA passt nun nicht mehr wirklich zu diesem Projekt.

elmarfaber commented 3 years ago

Ja das stimmt, aber ich wollte ein wenig mehr verstehen - letzendlich ist das HB-ES-PMSw1-USB Projekt vermutlich mehr oder weniger genau das, was ich gesucht habe. Ich denke der INA219 passt nicht wirklich zum Projekt, er kann ja nur 3,6A maximal und da ist die Auflösung nicht passend. Ich könnte alles rauswerfen bis auf die Initialisierung etc. dann würde es wieder passen.

jp112sdl commented 3 years ago

Ich könnte alles rauswerfen bis auf die Initialisierung etc. dann würde es wieder passen.

Hier im Github hat sich nichts geändert. Im master-Branch ist nach wie vor der ursprüngliche Sketch enthalten.

elmarfaber commented 3 years ago

Ich werde das am WE übertragen, ich wußte nicht genau wie weit ich komme und wollte keinen Mist eintragen und habe erst mal alles lokal getestet.

elmarfaber commented 3 years ago

Irgend etwas habe ich wohl falsch gemacht, habe die Änderungen eingetragen, aber jetzt sehe ich sie nicht mehr. Wie gehe ich denn korrekter Weise vor, wenn ich Änderungen eintragen will?

jp112sdl commented 3 years ago

Fork ziehen, Änderungen im eigenen Repository machen, Pullrequest erstellen