add script to generate database for kicad
This commit is contained in:
parent
efeaebce59
commit
f9d072a3f0
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env ruby
|
||||
# encoding: utf-8
|
||||
# ruby: 3.0.0
|
||||
=begin
|
||||
script to create view use by KiCad database library
|
||||
https://docs.kicad.org/master/en/eeschema/eeschema.html#database_libraries
|
||||
=end
|
||||
require 'mysql2'
|
||||
require 'json'
|
||||
|
||||
CREDENTIALS = "credentials.json"
|
||||
raise "database information #{CREDENTIALS} do not exist" unless File.file? CREDENTIALS
|
||||
credentials = {}
|
||||
JSON.parse(IO.read(CREDENTIALS)).each {|key,value| credentials[key.to_sym] = value}
|
||||
Mysql2::Client.default_query_options.merge!(:as => :hash)
|
||||
db = Mysql2::Client.new(credentials)
|
||||
|
||||
puts "create part to model views"
|
||||
|
||||
db.query("CREATE OR REPLACE VIEW part_kicad_symbol AS \
|
||||
SELECT properties.part AS part, properties.value AS kicad_symbol FROM properties JOIN property ON property.id = properties.property WHERE property.name = 'kicad_symbol'")
|
||||
db.query("CREATE OR REPLACE VIEW part_kicad_footprint AS \
|
||||
SELECT properties.part AS part, properties.value AS kicad_footprint FROM properties JOIN property ON property.id = properties.property WHERE property.name = 'kicad_footprint'")
|
||||
db.query("CREATE OR REPLACE VIEW part_qeda AS \
|
||||
SELECT v1.part AS part,v1.value AS qeda_part,v2.value AS qeda_variant FROM properties AS v1 LEFT JOIN property AS p1 ON p1.id = v1.property LEFT JOIN properties AS v2 ON v2.part = v1.part LEFT JOIN property AS p2 ON p2.id = v2.property WHERE p1.name = 'qeda_part' AND p2.name = 'qeda_variant'")
|
||||
|
||||
puts "create part category tables"
|
||||
|
||||
kicad_dbl = {} # kicad database library file
|
||||
kicad_dbl["meta"] = {version: 0}
|
||||
kicad_dbl["name"] = "CuVoodoo Database Library"
|
||||
kicad_dbl["description"] = "database of all my parts"
|
||||
# username/UID and password should be configured in DSN so we don't lead it when we share the resulting file
|
||||
kicad_dbl["source"] = {type: "odbc", dsn: "partdb", timeout_seconds: 3}
|
||||
kicad_dbl["libraries"] = []
|
||||
|
||||
categories = db.query("SELECT properties.value AS category FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category'").to_a.collect {|row| row['category']}
|
||||
categories.uniq!
|
||||
categories.each do |category|
|
||||
puts category
|
||||
table = "kicad_lib_" + category.gsub(" ","_").gsub("-","_").gsub("/","_").downcase
|
||||
view = "CREATE OR REPLACE VIEW #{table} AS \
|
||||
SELECT part.id, part.name, part.description, \
|
||||
COALESCE(symbol1.kicad_symbol,symbol2.kicad_symbol) AS kicad_symbol, \
|
||||
COALESCE(footprint1.kicad_footprint,footprint2.kicad_footprint) AS kicad_footprint, \
|
||||
COALESCE(qeda1.qeda_part,qeda2.qeda_part) AS qeda_part, \
|
||||
COALESCE(qeda1.qeda_variant,qeda2.qeda_variant) AS qeda_variant \
|
||||
FROM part \
|
||||
LEFT JOIN part AS parent ON parent.id = part.family \
|
||||
LEFT JOIN part_kicad_symbol AS symbol1 ON symbol1.part = part.id \
|
||||
LEFT JOIN part_kicad_symbol AS symbol2 ON symbol2.part = parent.id \
|
||||
LEFT JOIN part_kicad_footprint AS footprint1 ON footprint1.part = part.id \
|
||||
LEFT JOIN part_kicad_footprint AS footprint2 ON footprint2.part = parent.id \
|
||||
LEFT JOIN part_qeda AS qeda1 ON qeda1.part = part.id \
|
||||
LEFT JOIN part_qeda AS qeda2 ON qeda2.part = parent.id \
|
||||
WHERE part.id IN (SELECT part FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category' AND properties.value = '#{category}') \
|
||||
OR parent.id IN (SELECT part FROM properties LEFT JOIN property ON property.id = properties.property WHERE property.name = 'category' AND properties.value = '#{category}')"
|
||||
db.query(view)
|
||||
library = {name: category, table: table, key: "name", symbols: "kicad_symbol", footprints: "kicad_footprint"}
|
||||
library[:properties] = {description: "description"}
|
||||
library[:fields] = []
|
||||
library[:fields] << {name: "QEDA part", column: "qeda_part", visible_on_add: false, visible_in_chooser: true, show_name: false, inherit_properties: true}
|
||||
library[:fields] << {name: "QEDA variant", column: "qeda_variant", visible_on_add: false, visible_in_chooser: true, show_name: false, inherit_properties: true}
|
||||
kicad_dbl["libraries"] << library
|
||||
end
|
||||
|
||||
File.open("partdb.kicad_dbl", "w") do |file|
|
||||
file.write kicad_dbl.to_json
|
||||
end
|
Loading…
Reference in New Issue