Comments (4)
Hi,
can you send me the code you are using?
from coapthon.
#!/usr/bin/env python
from coapthon import defines
from coapthon.resources.resource import Resource
from threading import Lock
import grovepi as grove
class ButtonResource(Resource):
def __init__(self, name="ButtonResource", coap_server=None, connector=7):
super(ButtonResource, self).__init__(name, coap_server, visible=True, observable=True, allow_children=False)
self.payload = False
self.value = False
self.lock= Lock()
self.connector = connector
grove.pinMode(connector,"INPUT")
def render_GET(self, request):
with self.lock:
self.payload = str(self.value)
return self
def render_PUT(self, request):
with self.lock:
self.value=bool(request.payload)
return self
def isEqual(self,a,b):
return a == b
def checkValue(self):
newVal = bool(grove.digitalRead(self.connector))
with self.lock:
if not self.isEqual(newVal,self.value):
self.value = newVal
self.payload = str(self.value)
self.changed=True
checkValue is polled periodically from another thread. The locking a not yet satisfying as I don't control the time when the servers reads payload but I don't think it will be a problem for this application. The Server is more or less your demo server with a ButtonRessource
from coapthon.
Hi,
I faced the same problem and I guessed it was the CoRE link format and its attributes.
I had to skipped its implementation too
from coapthon.
Well, I finally found time to deeply investigate your question. Actually, I have to remove the changed property because it is no more used and I think I also need to add a ane example regarding your question. In order to asynchronously notify interested clients when a resource changes due too an "internal event" you should invoke the self._coap_server.notify(self). Your example can be corrected straightforward:
#!/usr/bin/env python
from coapthon import defines
from coapthon.resources.resource import Resource
from threading import Lock
import grovepi as grove
class ButtonResource(Resource):
def __init__(self, name="ButtonResource", coap_server=None, connector=7):
super(ButtonResource, self).__init__(name, coap_server, visible=True, observable=True, allow_children=False)
self.payload = False
self.value = False
self.lock= Lock()
self.connector = connector
grove.pinMode(connector,"INPUT")
def render_GET(self, request):
with self.lock:
self.payload = str(self.value)
return self
def render_PUT(self, request):
with self.lock:
self.value=bool(request.payload)
return self
def isEqual(self,a,b):
return a == b
def checkValue(self):
newVal = bool(grove.digitalRead(self.connector))
with self.lock:
if not self.isEqual(newVal,self.value):
self.value = newVal
self.payload = str(self.value)
self._coap_server.notify(self)
Hope this helps.
from coapthon.
Related Issues (20)
- coap-client to CoAPthon
- token handling is not compliant with RFC 7252
- Unmatched incoming response problem
- Does CoAPthon support observer and block transfer together as per https://tools.ietf.org/html/rfc7959#page-26
- How to upload file?
- Sending CoAP message using http server post HOT 1
- DTLS documentation out of date?
- In client/coap.py, _wait_for_retransmit_thread may never exit in some cases
- sleepy node (mostly staying in low power, radio not reachable) sending duplicate messages HOT 2
- Do NOT create logging.conf HOT 4
- Unable to create a registration resource
- not compatible with Python 3 (print syntax)? HOT 1
- COAP server showing method not allowed(405) for unavailable resource where as it should be not found (404)
- What will be the callback parameter for observe?
- An error occurs in block mode.
- observe.py gets stuck when there are more than 3 publisher
- Method Not Allowed
- resourcedirectory_test.py
- Coapclient can not receive data from Coapserver
- How do I change the block size in a GET request?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from coapthon.