Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

26 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

ETHome

ETHome is a proof of concept of a blockchain based organization of a local low voltage energy community. The focus of the concept is efficient use of shared resources to minimize external dependence, and not energy trading. A previously proposed control algorithm, which exploits the power dependency of the efficiency of electrical energy storages, is implemented as a smart contract on a private instance of an Ethereum blockchain to coordinate the operation. It is implemented using four connected Raspberry Pis representing the participating households with pre-given electrical load and photovoltaic conversion as well as a battery. Each household runs an Ethereum full node and an interfacing software. Only the energy technology components are simulated, while the blockchain is actually running on the Raspberry Pis in order to mind the full complexity of the technology.

More info and evaluation of the concept can be found in the original paper: Jonas Schlund, Lorenz Ammon and Reinhard German, “ETHome: Open-source blockchain based energy community controller,” Ninth ACM International Conference on Future Energy Systems (ACM e-Energy), June 12-15 2018 https://doi.org/10.1145/3208903.3208929

Quickstart

Follow these steps to quickly set up the project yourself.

  • make sure you have Python3, Web3.py and geth installed (tested with Python 3.5.3, web3 4.0.0b5 and geth 1.7.3)
  • make sure you have your private Ethereum network or any test network up and running with a couple of nodes. In our case we used 4 Rasperry Pis in order to represent 4 participating houses and a private Ethereum chain with Proof-of-Authority as consensus mechanism. This is a good instruction how to set up a private chain.
  • deploy the smart contract (CommunityController.sol) e.g. via solc
import json
from solc import compile_source
from web3 import Web3, HTTPProvider
fr = open('CommunityController.sol')
contract_source_code = fr.read()
fr.close()
compiled_sol = compile_source(contract_source_code)
contract_interface = compiled_sol['<stdin>:CommunityController_v13']
#save the abi for contractWrapper-nodes
fw = open('CommunityController_abi.json', 'w+')
json.dump(contract_interface['abi'], fw)
fw.close()
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx with your rpcport
contract = web3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])
tx_hash = contract.deploy(transaction={'from': web3.eth.accounts[0], 'gas': 4100000})
tx_receipt = web3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']
  • adjust the contract and node addresses in addresses.py
  • register all the participants with their optimal operation points (in mW)
from web3 import Web3, HTTPProvider
web3 = Web3(HTTPProvider('http://localhost:xxxx')) # replace xxxx import addresses
from contractWrapper import contractWrapper
c=contractWrapper(addresses.CommunityController,'http://localhost:xxxx',0)
c.register(1500000,1500000) #optimal operation points for charging / discharging
  • adjust your source file path for photovoltaic supply and household demand and the path for the logger in node.py
  • make sure the timeStep is in accordance with the resolition of your source files for photovoltaic supply and household demand
  • adjust the host port for the contractWrapper in node.py
  • parameterize the battery model (battery.py) or adapt your own battery model considering the interfaces
  • start node.py in all of your nodes

Contributing

When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change.

License

This project is licensed under the LGPL License - see the LICENSE file for details

About

ETHome is an open-source blockchain based energy community controller

Resources

Stars

11 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages