Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

INA219 (work in progress) #2

Open
elmarfaber opened this issue May 16, 2021 · 39 comments
Open

INA219 (work in progress) #2

elmarfaber opened this issue May 16, 2021 · 39 comments

Comments

@elmarfaber
Copy link

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
Copy link
Owner

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
Copy link
Author

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
Copy link
Owner

jp112sdl commented May 17, 2021

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

#define NUM_CHANNELS 3

@elmarfaber
Copy link
Author

elmarfaber commented May 17, 2021

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
Copy link
Owner

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
Copy link
Author

elmarfaber commented May 21, 2021

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
Copy link
Owner

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
Copy link
Author

elmarfaber commented May 21, 2021

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
Copy link
Owner

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
Copy link
Author

elmarfaber commented May 21, 2021

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:
<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="ACS712 or other" /> </logical>

Alles neu gestartet auch gelöscht und neu angelernt

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

@jp112sdl
Copy link
Owner

Bei mir ist alles da
Bildschirmfoto 2021-05-21 um 16 15 35

@elmarfaber
Copy link
Author

elmarfaber commented May 21, 2021

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
Copy link
Owner

jp112sdl commented May 21, 2021

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
Copy link
Owner

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
Copy link
Author

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

@elmarfaber
Copy link
Author

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
Copy link
Owner

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

@elmarfaber
Copy link
Author

elmarfaber commented May 21, 2021

#!/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
Copy link
Owner

Vielleicht ein Cache Problem des Browsers?
Habe deinen Code 1:1 verwendet:
Bildschirmfoto 2021-05-21 um 19 07 29

@elmarfaber
Copy link
Author

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
Copy link
Owner

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
Copy link
Author

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
Copy link
Owner

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
Copy link
Author

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
Copy link
Owner

jp112sdl commented May 22, 2021

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
Copy link
Author

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
Copy link
Owner

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

@elmarfaber
Copy link
Author

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
Copy link
Owner

jp112sdl commented May 22, 2021

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 ?

cs[0].current = ina219.getCurrent_mA(); cs[0].ok = true;

ina219.getCurrent_mA() / 10

@elmarfaber
Copy link
Author

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
Copy link
Owner

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?

ina219.setPGain(PG_160); //1.6A

Hab mich im Detail nicht weiter mit dem INA219 befasst bisher

@elmarfaber
Copy link
Author

elmarfaber commented May 22, 2021

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
Copy link
Author

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
Copy link
Owner

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

@elmarfaber
Copy link
Author

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
Copy link
Owner

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
Copy link
Author

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
Copy link
Author

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
Copy link
Owner

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants