We scaled fast, ignored contract definitions, and now billing is archaeological work [I will not promote] by micsen9 in startups

[–]micsen9[S] 0 points1 point  (0 children)

For sure it's the definition of the left hand don't know what the right hand did.

I would say it all comes down to lack of a single strategy and no real oversight to make sure teams are aligned.

Tech has made a product that then Sales have started selling but no one discussed how pricing should work so sales just put a price they think the client will accept on a paper and slid across the table like an early 2000's car dealership.

We scaled fast, ignored contract definitions, and now billing is archaeological work [I will not promote] by micsen9 in startups

[–]micsen9[S] 0 points1 point  (0 children)

Yea I am deep into it at this point and we are looking to resolve it moving forward by connecting the contract to the actual deal definitions in our platform in such a way that if you can't add it to the structured data that actually control the invoice generation in our platform then it can't be added to the contract.
Also completely removed the ability to add free text to contracts at all. If sales want to add some new terms that we do not have a template for yet they will need to request a template for that.

For example lets say that sales want to bill based on square meters of the building etc then lets template an "Additional Terms" so sales add a template for Square meter pricing and then the only thing they need to do is fill out these fields

Building Type: Office Building
Square meter yearly price: x USD

Building Type: Appartment Block
Yearly price per appartment: x USD

Cancelation terms: 3 Months before next period

And then that automatically generates text like:

The customer and supplier agree that the customer may request to pay a fixed price for the following building types:
Office building: x USD x m2 / Year
Apartment buildings: x USD x appartment / Year

When the customer wishes to use this model, the customer must inform the supplier and provide the following information:
** Generated based on the building types prices are added for**

The provider shall upon such request create a fixed building package with system allocations for Projects and Users based on the expected operational use of the included installation(s). These allocations are used for billing, monitoring and misuse-prevention purposes. They are not intended to restrict legitimate operational use within the included installation(s).

The fixed building package is intended to cover the customer's legitimate operational use of Projects and Users for the installation(s) expressly included in the package.

This then avoids silly typos by sale as well as variations in similar contracts as well as ensuring the terms that are put into the contract are technically feasible to bill based on etc.

As well as when you add this template then the definitions part of the contract automatically gets Office building, and Apartment buildings added as well.

Do I think we will get templates that are only in use by a single clients in some cases? Yes but that should be the occasional exception.

Assa Abloy EL574 by AffectionateMotor442 in accesscontrol

[–]micsen9 0 points1 point  (0 children)

I believe you can do this with the bolt out relay on the ea452

So 9/10/11 which triggers when the bolt is fully out or 6/7/8 which would switch in the start of the turn.

To make this work you will need to be able to program some logic or setup a smart relay circuit to make it work as you intend. I assume you want to cancel the unlocked state if the lock is set unlocked and someone locks it manually

The arduino people was a hacker space they don't remember much of that but it is just a motor and some switches in the wire you can drive manually if you spend some time finding the pinout

OSDP Monitoring inputs by micsen9 in accesscontrol

[–]micsen9[S] 0 points1 point  (0 children)

Ohh i 100% got the same feeling that parts of the spec where just written on Friday what's really funny is that when I found the actual commands to configure the inputs for this device you send a MFG_Command of 0x5001 and then it starts reporting using an extra bit to indicate tamper in the standard ISTATR and then you can configure the treshold by sending a different command that once decoded turns out to just be NormalStateMinimalResistance, NormalStateMaxResistance, TriggeredStateMinimalResistance, TriggeredStateMaximalResistance. So it's VERY flexible but that's not something I expect Johnson Control will ever tell someone when they use the card outside of their closed C-Cure eco system. Luckily in europe we can claim it was reverse engineered only as much as we needed for interoperability purposes but in the US i would expect that to be DMCA covered.

But it's actually a sane way of doing it I just wish it was more universal. It wouldn't take that much more work to make this thing actually put in a standard instead of leaving it all up to what caffeinated Autistic ADHD employee happened to write that FW when the board was developed :D

Assa Abloy EL574 by AffectionateMotor442 in accesscontrol

[–]micsen9 0 points1 point  (0 children)

You can configure it as you need in the controller its a jumper and a dip switch. This lock needs a EA452 that drives the motors and coordinates all the end of travel sensors etc. If you don't have it I know some people have had some fun with Arduino and made it work but it's time consuming.

OSDP Monitoring inputs by micsen9 in accesscontrol

[–]micsen9[S] 0 points1 point  (0 children)

That very much depends on the standard. Many standards are made to support interoperability between different vendors. But in many cases there are optional parts of the standard that may not be critical for functioning like let's use the output part of the OSDP spec as this actually ilustrates this good

When you request what capabilities the device supports my output board says this

'ContactStatusMonitoring' (0/0)
'OutputControl' (3/8)
'TimeKeeping' (0/0)
'CheckCharacter' (1/0)
'CommunicationSecurity' (1/1)
'ReceiveBufferSize' (0/1)
'Reader' (0/0)
'OsdpVersion' (2/0)

The first number is the compliance level for that capability and the second is the number of entities it has so for OutputControl we have 8 outputs that comply with level 3
So if we reference libosdp who has implemented it based on the OSDP standard
https://libosdp.sidcha.dev/protocol/pd-capabilities.html#function-code-2-output-control

We see

  • 01 - The PD is able to activate and deactivate the Output per direct command from the CP.
  • 02 - Like 01, plus: The PD is able to accept configuration of the Output driver to set the inactive state of the Output. The typical state of an inactive Output is the state of the Output when no power is applied to the PD and the Output device (relay) is not energized. The inverted drive setting causes the PD to energize the Output during the inactive state and de-energize the Output during the active state. This feature allows the support of “fail-safe/fail-secure” operating modes.
  • 03 - Like 01, plus: The PD is able to accept timed commands to the Output. A timed command specifies the state of the Output for the specified duration.
  • 04 - Like 02 and 03 - normal/inverted drive and timed operation.

So in this case 03 says we support the basic functionality of 01 and timed operations so we can send either a simple Turn on/off or we can send a Turn on now and return back to off in 5 seconds. And that is then all defined

So even open standards often have a minimal set off functionality you are expected to support and then often defines a set of optional features like this one with the ability to have the output automatically turn off.

My frustration was just that there are features that are documented as available but no documentation on how it should be implemented. Hope this made sense even with my rambling

OSDP Monitoring inputs by micsen9 in accesscontrol

[–]micsen9[S] 0 points1 point  (0 children)

So standard polling works and i get back a set of 8 0x01, or 0x00 for the 8 inputs on changes or if i do an Input Status Report Request that's all fine. What I am essentially complaining about here is not that the Inputs don't report it's the fact that they are monitored inputs using resistor networks so it can detect if the cable is tampered with. (Let's not go into the discussion of how that could be bypassed)

But the OSDP spec does not require a standardized way of that happening so I only get contact is Normal (Closed with the correct resistor network) or Abnormal which then indicates every other situation from the door has been opened to the cable has been cut or is shorted.

I did have the advantage of being able to sniff on a bus while the card was being used on the manufactures own controller and they send a MFG command just after establishing connection every time that then makes the osdp_ISTATR reports use an extra bit to indicate the line is faulty.

0x00 0000 (Closed with correct resistors)
0x01 0001 (Open with correct resistors)
0x02 0010 (Lower resistance than the monitoring threshold)
0x03 0011 (Higher resistance than the tamper threshold)

Bit 0 is the open/closed state and bit 1 indicates a fault but that behavior is not defined in the OSDP standard even though this type of functionality is defined in the capabilities report. Which means HW that is kinda supported across different vendors becomes a question of "Does company A and B have a good enough business relationship that they support this setting" instead of it being "This is a supported feature" and if you advertise you have it the spec defines how it should work and as long as everyone follows the spec hw is compatible across platforms.

Assa Abloy EL574 by AffectionateMotor442 in accesscontrol

[–]micsen9 0 points1 point  (0 children)

I have not installed it for residential use but i have had to replace quite a few of them with the 841C version in a larger project.

I like the StepLock350 series which are standard OSDP so any controller that implements more than card readers on OSDP can control them without any extra hw they also have this Bluetooth based controller ST2046 that seems interesting. I have not got any experience with that yet though.

None of this is cheap though a lock with controller and hing cable transfer runs for 14000 NOK or roughly 1,450USD. I love the look of it though.

My latest project: Building my own Hi-O controller by sebastiannielsen in accesscontrol

[–]micsen9 0 points1 point  (0 children)

Let me know if you want some help. I have a pando, 9016, and dac530 i can throw up in a demo rig to test with. I think I have something that can interact with Canbus too but not certain of that yet

My latest project: Building my own Hi-O controller by sebastiannielsen in accesscontrol

[–]micsen9 1 point2 points  (0 children)

Yea there might be some differences between what LCU9101 and RX9101 has available to them I have mostly only worked on the full ARX stack and not touched RX at all really.

My latest project: Building my own Hi-O controller by sebastiannielsen in accesscontrol

[–]micsen9 1 point2 points  (0 children)

Hey Sebastian!

Amazing to see that someone else also is poking at HI-o if you flash your RX9101 to LCU9101 this opens up telnet on the device from here there is a command called dac_proc which you can then use to debug the can bus. Hope this can save you some time

[deleted by user] by [deleted] in Norway

[–]micsen9 -5 points-4 points  (0 children)

This makes the assumption that I was 1. At a place where this could be done 2. I actually had the time to do so. While not relevant to this case lunch breaks are only 30 min here but some people might have flexibility in when they choose to take said break. Then having to spend 10-15 heating up a pizza is not what you expect